学机械的,自学STM32自学cad能找到工作吗吗

如何学STM32- -十年经验教你如何学习嵌入式系统
> 如何学STM32- -十年经验教你如何学习嵌入式系统
如何学STM32- -十年经验教你如何学习嵌入式系统
  一、如何学习- - 的概念本文引用地址:  着重理解“嵌入”的概念 ,主要从三个方面上来理解。  1、从上,“嵌入”将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。比较高端的类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址, 可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。IXP系列最高主频可以达到 1.8G,支持2G内存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于体系统结构下由 intel进行整合后成Xscale内核的最高的处理器了。  2、从软件上前,嵌入就是在定制操作系统内核里将应用一并选入,编译后将内核下载到ROM中。而在定制操作系统内核时所选择的应用程序组 件就是完成了软件的“嵌入”,比如WinCE在内核定制时,会有相应选择,其中就是wordpad,PDF,MediaPlay等等选择,如果我们选择 了,在CE启动后,就可以在界面中找到这些东西,如果是以前PC上将的windows操作系统,多半的东西都需要我们得新再装。  3、把软件内核或应用文件系统等东西烧到平台中的ROM中就实现了一个真正的“嵌入”。  以上的定义是我在6、7年前给嵌入式系统下自话侧重于理解型的定义,书上的定义也有很多,但在“嵌入式”这个领域范围内,谁都不敢说自己的定义是十分确切的,包括那些专家学者们,历为毕竟嵌入式系统是计算机范畴下的一门综合性学科  二、如何学习嵌入式系统- -嵌入式系统的分层与专业的分类。  嵌入式系统分为4层,层、、操作系统层和。  1、,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的走起来相对容易,硬件层也是的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。  硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口_技术、微机原理及接口_技术、C语言。  2、 ,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导 至其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的 驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不 就是等上一会才能运行后来打开的程序。想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几编,不是太容易成功的,但其工资在嵌入式系统四层中可 是最高的。  嵌入式的驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。  3、操作系统层,对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说,XP操作系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所自己的女娲Hopen操作系统估计也得花遇几百人年才能搞定。因此这部分工作相对来讲没有太大意义。  4、,相对来讲较为容易的,如果会在windows下如何进行编程接口函数调用,到操作系统下只是编译和开发环 境有相应的变化而已。如果涉及Jave方面的编程也是如此的。嵌入式系统中涉及算法的由专业算法的人来处理的,不必归结到嵌入式系统范畴内。但如果涉及嵌 入式系统下面嵌入式数据库、基于嵌入式系统的网络编程和基于某此面的协议应用开发(比如基于SIP、H.323、Astrisk)方面又较为复杂, 并且有难度了。  三、如何学习嵌入式系统- -目标与定位。  先有目标,再去定位。  学 ,从硬件上讲,一方面就是学习接口电路设计,另一方面就是学习汇编和C语言的板级编程。如果从软件上讲,就是要学习基于ARM处理器的操作系统层面 的驱动、移植了。这些对于初学都来说必须明确,要么从硬件着手开始学,要么从操作系统的熟悉到应用开始学,但不管学什么,只要不是纯的操作系统级以上基于 API的应用层的编程,硬件的寄存器类的东西还是要能看懂的,基于板级的汇编和C编程还是要会的。因此针对于嵌入式系统的硬件层和驱动程的人,ARM的接 口电路设计、ARM的C语言和汇编语言编程及调试开发环境还是需要掌握的。  因此对于初学者必然要把握住方向,自己学习嵌入式系统的目标是什么,自己要在那一层面上走。然后再着手学习较好,与ARM相关的嵌入式系统的较为实际的两个层面硬件层和驱动层,不管学好了那一层都会很有前途的。  如果想从嵌入式系统的应用层面的走的话,可能与ARM及其它体系相去较远,要着重研究基嵌入式操作系统的环境应用与相应开发工具链,比如WinCe操作系统下的EVC应用开发(与windows下的VC相类似),如果想再有突破就往某些音视频类的协议上靠,比如VOIP领域的基于SIP或H.323协议的应用层开发,或是基于嵌入式网络数据库的开发等等。  对 于初学者来讲,要量力而行,不要认为驱动层工资高就把它当成方向了,要结合自身特点,嵌入式系统四个层面上那个层面上来讲都是有高人存在,当然高人也对应 的高工资,我是做硬件层的,以前每月工资中个人所得税要被扣上近3千大元,当然我一方面充当工程师的角色,一方面充当主管及人物的角色,两个职位我一个人 干,但上班时间就那些。硬件这方面上可能与我PK的人很少了,才让我拿到那么多的工资。  四、如何学习嵌入式系统- -开发系统选择。  很 多ARM初学者都希望有一套自己能用的系统,但他们住住会产生一种错误认识就是认为处理器版本越高、性能越高越好,就象很多人认为ARM9与ARM7好, 我想对于初学者在此方面以此入门还应该理智,开发系统的选择最终要看自己往嵌入式系统的那个方向上走,是做驱动开发还是应用,还是做嵌入式系统硬件层设计 与板级测试。如果想从操作系统层面或应用层面上走,不管是驱动还是应用,那当然处理器性能越高越好了,但嵌入式系统这个东西自学,有十分大的困难,不是几个月或半年 或是一年二年能搞定的事。  在某种意义上请,ARM7与9的差别就是在某些功能指令集上丰富了些,主频提高一些而已,就比如286和386。对于用户来讲可能觉查不到什么,只能是感觉速度有些快而已。  ARM7比较适合于那些想从硬件层面上走的人,因为ARM7系列处理器内部带MMU的很少,而且比较好控制,就比如S3C44B0来讲,可以很容易将 Cache关了,而且内部接口寄存器很容易看明白,各种接口对于用硬件程序控制或AXD单步命令行指令都可以控制起来,基于51单片机的思想很容易能把他 搞懂,就当成个32位的单片机,从而消除很多51工程师想转为嵌入式系统硬件ARM开发工程师的困惑,从而不会被业界某此不是真正懂嵌入式烂公司带到操作 系统层面上去,让他们望而失畏,让业界更加缺少这方面的人才。  而嵌入式系统不管硬件设计还是软件驱动方面都是十分注重接口这部分的,选择平台还要考察一个处理器的外部资源,你接触外部资源越多,越熟悉他们那你以后就业成功的机率就越高,这就是招聘时 所说的有无“相关技能”,因为一个人不可能在短短几年内把所有的处理器都接触一遍,而招聘单位所用的处理器就可能是我们完全没有见过的,就拿台湾数十家小 公司(市价几千万)的公司生产的ARM类处理器,也很好用,但这些东西通用性太差,用这些处理器的公司就只能招有相关工作经验的人了,那什么是相关工作经 验,在硬件上讲的是外围接口设计,在软件上讲是操作系统方面相关接口驱动及应用开发经验。我从业近十年,2000年ARM出现,我一天始做ARM7,然后 直接跑到了Xscale(这个板本在ARM10-11之间),一做就是五年,招人面试都不下数百人,在这些方面还是深有体会的。  我个人认为三星的S3C44b0对初学者来说比较合适,为什么这么说哪?因为接口资源比较丰富,技术成熟,资料较多,应该十分适合于初学者,有问题可能很容易找人帮且解决,因为大多数人都很熟悉,就如同51类的单片机,有N多位专家级的人物可以给你帮忙,相关问题得以很快解答,所然业界认为这款ARM都做用得烂了,但对于初学者来,就却是件好事。  因此开发系统的选择,要看自己的未来从来目标方向、要看开发板接口资源、还要看业界的通用性。  五、如何学习嵌入式系统- -成为高级嵌入式系统硬件工程师要具备的技能。  对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。因此年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,比如手机的Modem射频模块,都采用成熟的套片,而当年国际上只有两家公司有此技术,自我感觉模拟功能不太强的人,不太适合搞这个,如果真能搞定到手机的射频模块,只要达到一般程度可能月薪都在15K以上。  另一类就是数字部分了,在大方向上又可分为51/ARM的单片机类,DSP类,FPGA类, 国内FPGA的工程师大多是在IC设计公司从事IP核的前端验证,这部分不搞到门级,前途不太明朗,即使做个IC前端验证工程师,也要搞上几年才能胜任。 DSP硬件接口比较定型,如果不向驱动或是算法上靠拢,前途也不会太大。而ARM单片机类的内容就较多,业界产品占用量大,应用人群广,因此就业空间极 大,而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师相互PK,判定水平高低的依据。而接口设计这块最关键的是看时序,而不是简单 的连接,比如PXA255处理器I2C要求速度在100Kbps,如果把一个I2C外围器件,最高还达不到100kbps的与它相接,必然要导致设计的失 败。这样的情况有很多,比如51单片机可以在总线接 LCD,但为什么这种LCD就不能挂在ARM的总线上,还有ARM7总线上可以外接个Winband的SD卡控制器,但为什么这种控制器接不到ARM9或 是Xscale处理器上,这些都是问题。因此接口并不是一种简单的连接,要看时序,要看参数。 一个优秀的硬件工程师应该能够在没有参考方案的前提下设计 出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪,但不是胡乱的来,我遇到一个工程师把方案中的5V变1.8V的DC芯片, 直接更换成LDO,有时就会把CPU烧上几个。前几天还有人希望我帮忙把他们以前基于PXA255平台的手持GPS设备做下程序优化,我问了一下情况,地 图是存在SD卡中的,而SD卡与PXA255的MMC控制器间采用的SPI接口,因此导致地图读取速度十分的慢,这种情况是设计中严重的缺陷,而不是程序 的问题,因此我提了几条建议,让他们更新试下再说。因此想成为一个优秀的工程师,需要对系统整体性的把握和对已有电路的理解,换句话说,给你一套电路图你 终究能看明白多少,看不明白80%以上的话,说明你离优秀的工程师还差得远哪。其次是电路的调试能力和审图能力,但最最基本的能力还是原理图设计PCB绘 制,逻辑设计这块。这是指的硬件设计工程师,从上面的硬件设计工程师中还可以分出ECAD工程师,就是专业的画PCB板的工程师,和EMC设计工程师,帮 人家解决EMC的问题。硬件工程师再往上就是板级测试工程师,就是C语功底很好的硬件工程师,在电路板调试过程中能通过自已编写的测试程序对硬件功能进行 验证。然后再交给基于操作系统级的驱动开发人员。  总之,硬件的内容很多很杂,硬件那方面练成了都会成为一个高手,我时常会给人家做下方案评估,很多高级硬件工程师设计的东西,经常被我一句话否定,因此工程师做到我这种地步,也会得罪些人,但硬件的确会有很多不为人知的东西,让很多高级硬件工程师也摸不到头脑。  那么高级硬件件工程师技术技能都要具备那些东西哪,首先要掌握EDA设计的辅助工具类如ProtelORCADPowperPCBMaplux2ISE、 VDHL语言,要能用到这些工具画图画板做逻辑设计,再有就是接口设计审图能力,再者就是调试能力,如果能走到总体方案设计这块,那就基本上快成为资深工 程师了。  硬件是要靠经验,也要靠积累的,十年磨一剑,百年磨一针。
51单片机相关文章:
c语言相关文章:
电路图符号相关文章:
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一要成为机器人工程师应该学些什么?-专业自动化论坛-中国工控网
要成为机器人工程师应该学些什么?
给TA发消息
加TA为好友
发表于: 10:03:43
根据世界第一机器人的教育机构卡耐基梅隆大学的机器人学博士的课程分类方式,机器人学有四个核心领域:在真正开始谈该怎么做之前,笔者给了大家一些善意的提醒:但是,小瓦君想插播一个消息。关于笔者善意的提醒和爱的忠告就到这里了,接下来开始介绍如何才能成为一名机器人工程师。小瓦君将整个大一需要学习的整理为五大点翻墙必须要翻墙,先确保自己能上Google。这能让你在之后的职业生涯里节省上万块钱,所以别心疼买VPN的钱。注册一个Gmail账号再注册stackoverflow账号再注册github的账号再注册CSDN账号注册完多登录上去逛逛...英语英语水平会影响机器人工程师水平。一些高级的机器人知识都不是中文的参考资料,这个时候如果啃不下英文资料,进步速度和眼界就会受到很大影响。因此大一的时候要多看看红宝书,看看美剧。线性代数线性代数的重要性需要特别强调,优秀的工程师和科学家在职业生涯中要学至少五次线性代数。对学习线性代数推荐两书一教材:《Linear Algebra Done Right》《Linear Algebra Done Wrong》麻省理工公开课:线性代数。[2]不论如何,学线性代数一定要用国外的教材,千万不要用国内的教材,就算是英文也要啃下来,同时还要刷足够多的课后题。编程不管学的专业是什么,一定要在大学一年级尽早开始学编程。推荐从Python开始学习编程,比较好的Python开发学习环境是Anacoda 。比较好的教材是麻省理工学院公开课:计算机科学及编程导论。Python就像一把瑞士军刀,功能很多。但是真要去造机器人,合适的工具并不是瑞士军刀,而是C/C++这样简单粗暴的锤子和螺丝刀般的工具。笔者个人入门用的是清华大学出版的《C++语言程序设计》。不过国内的C语言教材都有个巨大的问题是不引导学生去用Linux。Makefile当你把C学得差不多,开始要学写包含多个头文件的程序时,一定要同时学习makefile的知识。这时候要上网去搜“Makefile详解”。笔者个人觉得HTML和Javascript也是机器人工程师必备的技术。因为web技术实际上已经渗透到了编程的方方面面。另外AJAX能够帮助初学者理解一定的网络技术原理,而网络技术也是机器人工程师必备的技能。上大二的时候,你已经学会了基本的编程知识和基本的数学知识。机器人工程师需要的技能数量是IT行业全栈工程师技能数量的三倍以上,这些技能的基础都应该在大二开始积累。大二应该掌握的技能大二阶段特别要强调的是对动手能力的培养,包括机械材料的加工、电路焊接、制作导线和接头、连接路由器、配置网络、做网线等等。在动手前,你需要准备以下工具~对于该选择造一个怎么样的“真正能用的机器人”练手,最好的选择肯定是机器人比赛中的机器人。参加Robocon,你会学着造有人那么高的巨大机械;参加RoboMasters,你会学着造比汽车还要灵活的机器人。其他一些小型的比赛比如飞思卡尔智能车,也是很好的训练。国内开源机器人社区也有很多资源可以利用来学习,比如自己买Arduino STEM educational Robot kits Building Platform的各种开发套件做简单的机器人。如果更希望接触到单片机的本质,可以自己买STM32开发板学习。STM32是ARM Cortex?M家族中最为广泛应用的一款单片机,在网上也有很多的教材和开发板可供选择。在国内著名的电子论坛STM32/8 分论坛上,有很多参考资料。大二的暑假,可以跟着学校的机器人队参加了一些机器人比赛,也可以自己做一个舵机机器人,比如六足机器人。舵机是机器人工程师的好朋友,一定要好好掌握。但是,大二要做的,远远不止参加机器人比赛。大二结束的时候,你的Linux应该用的很熟练了,除了makefile,你也用起了cmake。你还应该有做到...3000行代码学校应该给大二到大三的学生有开设面向对象的程序设计,一般用Java或C++。在面向对象的程序课里面,一定要积累3000行左右的代码的开发经验。经典的程序设计练习通常是写游戏,比如俄罗斯方块,吃豆人等等,一定要自己能够做到完全手写一个完整的项目出来。倒立摆在大二这一年的学习中,你的课程里多多少少用到了Matlab。要注意的是,Matlab最强大的工具是Simulink,通过它你几乎可以仿真一切的物理系统和控制系统。笔者建议同学可以通过Simulink实现一个倒立摆。倒立摆是机器人学中一个非常重要的模型,因为火箭、导弹、双足机器人、四足机器人,基本都是倒立摆的变形。自己做出来的simulink模型一定要存好哦~
打赏给楼主
友情提示:打赏的积分将从您的工控网积分账号扣除
给TA发消息
加TA为好友 发表于: 19:33:49 1楼
!!!!!!!!!!!!!!
给TA发消息
加TA为好友 发表于: 22:54:36 2楼
厉害。。。。。。。。。。。
给TA发消息
加TA为好友 发表于: 11:26:01 3楼
真好啊,真高大上啊!!!
周点击排行周回复排行
[3] [11] [0] [11] [6] [13] [17] [7] [8] [9]放弃51单片机,直接学STM32的开发会有什么严重的问题么? - 知乎1426被浏览319831分享邀请回答52347 条评论分享收藏感谢收起25031 条评论分享收藏感谢收起查看更多回答大三机械专业,现在自学嵌入式比如stm32,有必要花大把时间在这上面吗?对以后就业有帮助吗? - 知乎4被浏览1043分享邀请回答0添加评论分享收藏感谢收起}

我要回帖

更多关于 自学编程能找到工作 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信