个人认为嵌入式和以往的纯粹模电,数电,软件还是有很大差别的,在我们公司,有硬件工程师,驱动工程师,应用软件工程师,射频工程师等等之分.射频那块主要就是做模拟,当然也有集成度很高的模拟,数字混合IC.在有的公司,称之为电子工程师.
我目前的title是assistant hardware engin eer,做的就是嵌入式偏硬件的方向.例如处理器应用,外围电路搭载,.从早期的预研CPU,分析系统构架到项目真正启动后进行原理图设计,指导EDA人员LAYOUT,由专人负责联系PCB生产商投板,然后 SMT工厂进行IC贴装.在板子回来之前一定要准备好所有的硬件测试代码,板子回来后成功BOOT就是成功了一半,至少证明你对系统的大体构架把握的还是正确的.后来就是不断修改你的测试代码和飞线 ,找出电路和软件的BUG.等一切外设打通之后交驱动人员编写在OS下规范的驱动函数. 例如目前的几个项目有在Linux下的有在WINCE, thredX, VxWorks下的.一名合格的驱动人员首先要对相应的OS充分的了解,就有一些驱动被上层调用后经常堵塞其它进程等,这不同与硬件人员写的测试程序,我们的代码目的是成功BOOT和打通所有硬件通道.驱动工程师和硬件工程师一起合作移植操作系统,从而提交给应用程序开发人员进行二次开发.这时的高层应用程序开发人员基本少不需要太多的关注底层细节的东西了,当然他们可能也要附带移植GUI,媒体播放器或在操作系统下开发其它一些应用软件等等.本人只做过硬件,还有三个月的驱动开发,可能对高层应用程序开发人员的具体工作任务描述的不是太明确,还请高人指正.
嵌入式开发人员的专业背景大致分为2类:
1.电类专业背景的,例如自动化,电子,通信等等,比较适合做硬件和驱动这块.
2.计算机专业的,比较适合做驱动和应用程序开发这块.
这里也就简单介绍下入门的所需要的专业知识和技能,继续深入那要靠个人的领悟和爱好了.当然本人也就出于刚刚起步状态,说得不对的地方请大力指正啊.
首先打下电路基础,例如社么叫阻抗匹配?差分电路?MOS管控制? 数字,模拟PLL原理?DC-DC转换?三极管静态工作点的设置?等等,这些看似枯燥的东东在以后的实践中大有用武之地,就不举例子说明了.电路基础扎实是成为一个硬件工程师的必备条件之一.
要具备很好的处理器方面的知识.首先你得分得情社么是8位机,32位机吧?你得指导啥叫”哈佛””冯络依曼”吧?RISC CISC?寻址方式?其实了解一个处理器最好的途径就是不偷懒从汇编指令开始学起.这时你可以看看这部机器对应的编译手册.等你可以用汇编写段小程序了,说明你起码知道机器是怎么动的了.这会大大增强你去控制它怎么动的信心.专业课不是有微机原理,和单片机原理吗?认真学好了这2门课,说明你初步具备掌握大型CPU的基础了..这是2门实践性很强的课,有的同学考试可能成绩很高,担你让他写段启动代码都可能无从下手.精力具备的要乘机,学好C语言基础和编译原理,为自己进一步深造打下坚实的基础.
这哪怕是以后做处理器硬件设计都必不可少的知识.在调试电路的时候可能会用到仿真器之类的东东,恭喜了,又有机会学习JTAG等等.由于学校试验环境有限,可能最多的是在单片机上跑跑小应用程序,例如写个I2C控制的RTC 程序等等.如果你对这个已经不满足了,就可以乘机涉足操作系统了,比较便于自学的小RTOS还是推荐大名鼎鼎的UCOS.简单明了,易学易上手,尤其是对我们这些不是计算机软件专业的同学来说.好了,能力强的可以移植个到自己板子上,要不网上也有很多现成的嘛,稍微改动就可以跑得很顺畅了.切记,做嵌入式无论是片软还是偏硬,OS知识必不可少.
在学校可能做硬件电路的机会相对少些,可能示波器好的都没几台,那就多花点力气把电路基础,OS基础打好.本科出来可能会被公司抓去做软件的可能性大一些,如果能在读研的时候好好做几块板子,也许就能做硬件.嵌入式软硬二面做好了都不容易!
其实嵌入式硬件和传统的电子电路还是有很大差别的,不好说谁比谁技术含量高的.要做好都不容易,都需要具备宽广的知识面.可能嵌入式硬件对软件,OS的能力要求比较高,而传统的电子电路对软件需求不是太大.等等.
恩,也不敢再继续下去了,再说就有可能误道诸位了.
希望上面的这些话能给渴望进入嵌入式开发行列的学弟学妹们一点提醒吧!呵呵,我就不应用大名鼎鼎的”免责申明”了.
最后提醒大家:追求技术不是人生的唯一目的,切不可把它当成喜悦的唯一源泉,平时身边有很多美好的事物都值得用心去珍惜.呵呵,我已经在担心自己的智力是否会在30岁到来之前枯竭了.好好珍惜短暂的大学生活,好好珍惜自己的青春,不要整天呆在实验室,左手键盘右手烙铁的…… |