广告
本文将从技术和就业经验的角度,为即将进入嵌入式开发的程序员详细介绍嵌入的概念、嵌入式开发的异同以及如何做出选择。 希望对大家有所帮助。
一、嵌入式系统的概念
JavaScript 集成测试工具 TestSwarm 发布
基于ARM的智能无线信号发射器
Android+ARM组合闪耀Computex2009
使用RMI实现基于Java的分布式计算
ARM 嵌入式开发基础
重点理解“嵌入”的概念
主要从三个方面来理解。
1、在硬件方面,将基于CPU的处理设备集成到CPU芯片中。 例如,在早期基于X86架构的计算机中,CPU只有运算器和累加器的功能。 所有芯片都需要搭建外部桥接来扩展实现,比如串口,是通过外部16C550/2串口控制器芯片来实现的,目前的串口控制器芯片已经集成到CPU中,PC端有一个显卡和大部分嵌入式处理器都有LCD控制器,但在某种意义上它就等同于显卡。 比较高端的ARM-like IntelXscale架构下的IXP网络处理器CPU,集成了一个PCI控制器(可配置为支持4个PCI从设备或配置为一个CPI从设备); 还集成了3个NPE网络处理器引擎,其中两个对应两个MAC地址,可以用于网关切换,另外一个NPE网络处理器引擎支持DSL,只要在外面加一个PHY芯片,DSL上网功能可以实现。 IXP系列最高主频可达1.8G,支持2G内存,1G×10或10G×1以太网口或Febrechannel光通道。 IXP系列应该是intel基于ARM体体系结构集成Xscale内核的最高处理器了。
2、从软件的前面,在定制的操作系统内核中一起选择应用程序,编译后将内核下载到ROM中。 定制操作系统内核时选择的应用组件是为了完成软件的“嵌入”。 比如WinCE在定制内核的时候会有相应的选择,包括写字板、PDF、MediaPlay等,如果我们选择,CE启动后,在界面中可以找到这些东西。 如果是之前PC上的Windows操作系统,大部分东西都需要重装。
3、真正的“嵌入”是将软件内核或应用文件系统烧录到嵌入式系统硬件平台的ROM中。
上面的定义是我6、7年前给嵌入式系统的定义,侧重于理解型。 书上有很多定义,但是在这个领域,没有人敢说他们的定义很准确。 是的,包括那些专家学者,毕竟嵌入式系统是计算机范畴下的一门综合性学科
二、嵌入式系统的分层和专业分类。
嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。
1、硬件层是整个嵌入式系统的基础。 如果熟悉单片机和接口,会用C和汇编语言编程,那么从嵌入式系统的硬件层上去还是比较容易的。 硬件层也是驱动。 一个优秀的驱动工程师必须能够看懂硬件的电路图,自己完成CPLD的逻辑设计。 同时,他必须非常熟悉操作系统内核及其调度。 但硬件平台是基础,增值还得靠软件。
硬件层比较适合电子、通信、自动化、机电一体化、信息工程等专业的人。 需要掌握的专业基础知识包括单片机原理与接口技术、微机原理与接口技术、C语言。
2.驱动层,这部分比较难。 驱动工程师不仅要能看懂电路图,还要非常精通操作系统内核,这样他写的驱动才不会在系统调用时独占操作系统时间片,而导致其他任务无法执行,不了解操作系统内核架构和实时调度,没有良好的驱动编写风格。 按照大多数书上提到的添加驱动的方式,很多人都可以做到,但是即使是初级驱动工程师的水平也达不到这个水平,所以当驱动被应用调用时,就像我们打开一个程序在windows下运行,当我们打开另一个程序时,要么打断前面的程序,要么等待。 运行稍后打开的程序需要一段时间。 如果你想成为一名优秀的司机,你没有三四年的知识。 如果不研究几年操作系统内核,是不容易成功的,但它的薪水是嵌入式系统四层中最高的。
驱动层比较适合电子、通信、自动化、机电一体化、信息工程等专业,尤其是计算机体系结构专业。 系统原理和编译原理必须非常熟练地理解。
3.操作系统层。 对于操作系统层,目前可能只是简单的移植,很少有人从写好的操作系统过来,或者写一个缺胳膊少腿的操作系统。 这部分工作大部分是由驱动工程师完成的。 结束。 操作系统负责系统任务的调试、磁盘和文件的管理,嵌入式系统的实时性非常重要。 据说微软在两年内投入了300人完成了XP操作系统。 总工时600人年。 因此,这部分工作相对没有意义。
4.应用层比较容易。 如果知道Windows下如何调用编程接口函数,那只是操作系统下编译开发环境的相应改变。 如果涉及Java编程,也是如此。 嵌入式系统中涉及的算法由专业算法处理,不必归于嵌入式系统的范畴。 但是,如果涉及到嵌入式系统下的嵌入式数据库,基于嵌入式系统的网络编程,以及基于某些应用层(如基于SIP、H.323、Astrisk)的协议应用开发,则更为复杂和困难。
3.目标与定位。
先有目标,再去定位。
学习ARM,就硬件而言,一方面是学习接口电路设计,另一方面是学习汇编和C语言的板级编程。 在软件方面,需要学习基于ARM处理器的操作系统的驱动和移植。 这些初学者一定要清楚,要么从硬件开始学习,要么从对操作系统的熟悉到应用开始学习,但是不管学什么,只要不是纯操作系统级别或者API-based以上应用层编程,硬件你还是要能看懂寄存器之类的东西,还是要懂板级汇编和C编程。 因此,对于嵌入式系统的硬件层和驱动,ARM的接口电路设计、ARM的C语言和汇编语言编程调试开发环境还是需要掌握的。
所以初学者一定要把握好方向,自己的目标是什么,应该达到什么层次。 那么不如开始学习,ARM相关的嵌入式系统的硬件层和驱动层这两个层次比较实用,无论哪一层学好,都会很有前途。
如果要从嵌入式系统的应用层面上去,可能离ARM等系统还很远,必须着眼于嵌入式操作系统的环境应用和相应的开发工具链,比如EVC应用WinCe操作系统下的开发(类似于windows下的VC),要想有所突破,依赖于一些音视频协议,比如VOIP领域基于SIP或H.323协议的应用层开发,或者基于嵌入式网络数据库开发的应用层等。
对于初学者,我们必须量力而行。 不要觉得驱动层的薪水高就以此为方向。 一定要结合自己的特点。 嵌入式系统的四个层次,每一层都有专家。 当然,也有专家。 也对应着高薪。 我在硬件层工作。 以前,我每个月的工资,个人所得税要扣近3000元。 我自己做这份工作,但这就是所有的工作时间。 在硬件方面,可能很少有人能和我竞争,这也是我拿到这么多薪水的原因。
四、开发系统选择。
很多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不好用,但是对于初学者来说,却是个好东西。
因此,开发系统的选择取决于自己未来的目标方向、开发板接口资源以及行业的通用性。
五、如何对待培训。
首先,让我谈谈我自己。 我已经工作了将近十年。 我是从国内的嵌入式系统行业做起的。 我一直走在嵌入式系统行业的最前沿。 设计过许多高端嵌入式系统平台产品,为多家公司提供解决方案。 辞职前为一家从事VOIP的美资公司设计IP-PBX。 历任项目经理、项目主管、技术总监、部门经理。 他积累了很多人脉,积累了多年的经验。 公司招不到人,学生和刚毕业的工程师也不好找工作。 在这里,创智天行科技有限公司进行嵌入式系统教育培训。
由于一线科研人员与一线教师缺乏联系,国内嵌入式人才紧缺。 国外高校的技术领先于行业企业,而国内的情况是行业企业在嵌入式系统技术上遥遥领先于高校。 为了搭建行业与高校之间的桥梁,为大学生带来先进的技能,为学生在就业竞争中打造一张王牌,为行业内的工程师创造快速提升自我、实现自我的机会,我才辞职来自年薪20万以上的外企。 职位,做嵌入式系统培训。
就培训而言,花钱是为了买时间。 很多工程师喜欢自学,认为培训不值得。 这是一个很大的损失。 不知道他们有没有算过这样的一笔账。 如果一个星期的培训能带给他们两年自学才能掌握的知识,他们会在培训结束后花三到六个月的时间来消化培训内容。 ,这样他至少会节省一年半的时间去学习其他的东西或者在另一个高度工作,那么最迟两年后他会得到他这个级别对应的薪水,也就是薪水关系而言同等级,比同组人矮一年。 每个月最少一千来算,培训费至少要多扣一万。 同时,也节省了一年的时间。 好吧,总之,他跑到了队伍的最前面。
从另一个层面来说,对新人的培养,相当于给自己提前买了失业保险,由高手引导入道。 今年暑假我班最小的同学是大二的,今年才大三,这学期刚学的单片机,现在ARM的编程工作已经做好了,经过一年多的学习毕业了,他还会失业吗?
再者,通过培训,可以学到很多行业内普通人不知道的东西,同时也给自己找了个高手。 比如两个工程师用S3C2410和PXA255做手持设备,都干了四年。 年,再出去找工作,两人的工资差距最多可能翻一倍,为什么呢? 这是业内不为人知的规则。 2410是民用产品,工业上用的不好。 制造产品的成本非常敏感。 当然,它对人才成本也很敏感。 PXA255 是 Intel 的产品。 一个255CPU可以买三个2410,一直被业界定义为贵族产品。 使用它的公司是大公司或为军队服务的公司。 他们不在乎成本。 只要他们做得好,一切都好谈。 该系统很昂贵。
至于给自己找个好老师,我是这么认为的,因为同级别的工程师之间存在一定的潜在竞争,很多人不愿意把自己知道的教给别人,这意味着他会丢掉工作,是所谓教会徒弟,饿死师傅,但对我们这些人来说,根本就没有这种关系。 本人在嵌入式系统平台的设计方面已经达到了一定的水平,在国内技术上已经是独树一帜了。 突破自己很难,所以很多东西我都敞开心扉给大家看。 比如后面的接口设计中提到的时序接口。 只有10%的人知道
6.成为高级嵌入式系统硬件工程师所需的技能。
对于硬件,有几个方向。 纯信号分为数字信号和模拟信号。 模拟比较难做,一般需要长时间的经验积累。 单个电阻或电容的精度不足可能会导致较大的信号偏差。 所以,年轻人做的少。 随着技术的发展,出现了模拟电路数字化。 例如,手机的Modem射频模块采用成熟的芯片组。 当时全世界只有两家公司有这个技术,感觉有模拟功能。 实力不是很强的人不适合这个。 如果他们真的能拿到手机的射频模块,只要达到普通水平,他们的月薪可能会超过15K。
另一种类型是数字部分。 大方向上可分为51/ARM单片机、DSP、FPGA。 国内FPGA工程师大多在IC设计公司从事IP核的前端验证工作。 这部分不涉及。 在门级,未来还不是很明朗。 即使作为IC前端验证工程师,也需要几年时间才能胜任。 DSP硬件接口比较千篇一律。 如果不向驱动或算法靠拢,未来也不会太大。 ARM单片机内容较多,行业产品占有量大,应用人群广,就业空间巨大,硬件设计最体现水平和水平的是接口设计。 这是各个高级硬件工程师之间的相互竞争。 判断水平的依据。 接口设计最重要的是时序,而不是简单的连线。 例如,PXA255 处理器 I2C 需要 100Kbps 的速度。 如果给它接一个不能达到100kbps的I2C外围设备,势必会导致Design failure。 这样的情况还有很多,比如51单片机可以在总线上接LCD,但是为什么这种LCD不能接在ARM总线上,而一个Winband SD卡控制器可以接在ARM7总线上,但为什么这种控制器不能连接到ARM9或Xscale处理器,这些都是问题。 所以接口不是简单的连接,要看时序和参数。 一个优秀的硬件工程师应该能够在没有参考方案的情况下设计出性价比更好的产品。 依托现有的方案,也需要做适当的可行性削减,但不能随意。 我遇到过一个工程师把方案中的5V改成1.8V DC芯片,直接换成LDO,有时候会烧掉好几个CPU。
前几天有人找我帮忙优化他们基于PXA255平台的手持GPS设备的程序。 我问了情况。 地图存储在SD卡中,SD卡与PXA255接口的MMC控制器之间使用SPI,所以地图的读取速度很慢。 这种情况是设计上的严重缺陷,不是程序问题,所以提了几点建议,让他们更新再试。 因此,要想成为一名优秀的工程师,就需要把握系统的完整性,了解现有的电路。 也就是说,给你一组电路图,你到底能看懂多少? 一个好的工程师离它很远。 其次是电路调试能力和审图能力,但最基本的能力是原理图设计、PCB绘图、逻辑设计。 这是指硬件设计工程师。 从上面的硬件设计工程师中,还可以分出ECAD工程师,就是画PCB板的专业工程师,还有EMC设计工程师,帮人解决EMC问题。 硬件工程师是板级测试工程师,是具有良好C语言功底的硬件工程师。 在电路板调试过程中,他可以通过自己编写的测试程序来验证硬件功能。 然后根据操作系统层面交给驱动开发者。
总之,硬件的内容很复杂。 如果你练习硬件,你就会成为高手。 我经常给人们一个计划评估。 很多资深硬件工程师设计的东西,往往被我一句话否决,所以工程师干我干的。 到了这个层面,有些人会被冒犯,但是硬件中确实有很多不为人知的东西,让很多资深的硬件工程师百思不得其解。
所以高级硬件工程师必须具备这些技术技能。 首先,他们必须掌握EDA设计的辅助工具,如ProtelORCADPowperPCBMalux2ISE和VDHL语言。 另一个是调试能力。 如果你能搞到总体方案设计,基本上就是高级工程师了。
硬件要靠经验和积累。 十年磨一剑,一百年磨针。
广告
关于易商城
力创商城()是中国网上订单交易量最大的一站式电子元器件采购自营商城。 建有6000多平方米的现代化元器件仓库,拥有40000多个品种的现货库存。 作为深圳嘉利创集团旗下(电子全产业链自营服务包括:在线EDA(EasyEDA)+行业领先的PCB打样/中小批量+元器件商城+钢网制造+SMT贴片+电子设计教育及解决方案)品种齐全、自营库存、品质有保障的电子元器件垂直商城。 易商城所有元器件均采购自原厂或正规渠道代理商,保证原装正品,为您提供专业的一站式电子元器件。 采购服务。