我看嵌入式开发

  这段时间,我回答嵌入式相关的问题比较多,结果网友们误觉得我很懂嵌入式,呵呵,这不,又有问题过来:程序员

原文:算法

 

肖舸老师,您好!谢谢您抽空看个人邮件。
昨天在51CTO认识了您,您对IT行业有着很是丰富的经验,我如今遇到一个困惑,但愿能获得您的教导与建议。

我已经在工做了,所属行业是嵌入式Linux。嵌入式行业无疑就是应用开发与驱动开发,我如今困惑的也就是这两个小方向的选择。

我了解了下如今智能终端的市场,对一个嵌入式设备来说,应用软件算是比较重要而且吸引人的地方,但我本身又偏喜欢驱动开发。

我本身有思考过了,但终究是刚起步,不太了解这行业的需求量或者一些深刻性的东西,没有您这么深厚的认识。

您以为在嵌入式设备上,应用开发与驱动开发哪一个前景会比较好?有什么建议?

 

个人回答:api

嗯,这位朋友,首先声明一点啊,我其实本人从事嵌入式开发较少,我并非嵌入式开发专家,我不少基于嵌入式的论述,其实更懂是经过我对计算机软件开发,或者说计算机软硬件开发的理解来阐述的。所以,太细的问题我回答不了的,见谅哈。架构

嗯,基于你这个问题,我能够谈点个人见解。ide

我先说个猛的啊,别惧怕啊,呵呵。性能

我认为,“这个世界上,不存在真正的嵌入式开发!”,猛不猛?学习

为何这么说?好,咱们来讨论一个话题,什么叫作嵌入式。spa

嗯,区分方法有不少啦,不过,恐怕你们心目中,最多用的就是“大”和“小”。大,天然相对PC机而言,小呢,嵌入式设备都很小。好比一个控制盒,一个手机,等等。操作系统

但我说这么论述,偏偏没有说到点子上。你说大,PC够大吗?那IBM的大型机就开始哭了。你说小,我看过工厂里面的自动生产线,几百米长呢,比大型机都大。可是,你能说明它不是嵌入式?架构设计

99年的时候,我作过一个系统,《水泥生产窑红外线筒体测温报警系统》,看这个名字,算不算嵌入式范畴?

问题是,我是用PC机完成的,呵呵。用了gcc的DOS版本,djgpp,32位的C/C++语言实现的。

原理很简单,我去买了个红外线测温头,用个螺丝把它上到步进电机上,而后我老板(他懂硬件),用8235作了一块卡,要AD转换嘛,读出温度数据,还顺便作了几路IO量,我总得给步进电机打信号啊。

而后焊了个箱子,防雨嘛,我还专门学习了一下油漆技术。而后咱们把这个箱子放到远处能完整看见水泥窑筒体的楼顶上,在楼里面找了个房间放PC机,而后就行了。

成本1万块,咱们卖了28万,呵呵。而后,再后来,我都离开那家公司好久了,老板和我说,每月卖4套,看起来很不错。

我问问你们,这算不算嵌入式?

固然,咱们不是忽悠钱,这里面有核心技术含量的,步进电机须要很标准的方波信号,个人问题就是怎么利用PC机不怎么准确的时钟频率,打出标准的IO方波高电平的,我去年公开了一个算法,《一个带自适应功能的高精度计时》,就是这里面最核心的算法,仅仅是我用C++改写了一下而已。有兴趣的朋友能够看看。

好,这个项目不重要,PC机也不重要,个人问题是,究竟什么是嵌入式?

说点个人见解吧,我认为,嵌入式和PC最大的差异,前者是专用计算机系统,PC更加像一个通用的计算机系统。两者各有优缺点。

嵌入式没有什么UI,没有什么繁多的功能,强调小而专注,能把一个用户需求解决到最好,而且,整合度高,不少嵌入式系统就一块板子,没有硬盘扩展卡什么的,稳定性好。

而PC呢,这些也能作,可是因为PC设计为通用平台,强调方便的扩展性,所以,冗余功能过多,售价有点贵,还有,强调了扩展性,稳定性就受影响,没有专注系统稳定性好。

可是不绝对,PC在某种场合也能够充做嵌入式设备使用的,可是仍是要有一些特殊设计,好比说咱们的系统没有显卡,板载,这就是考虑稳定性,咱们的扩展板有光耦隔离,防止电流峰值冲击,咱们的PC是整合式的小机箱,也是考虑做为一个设备,长期7*24小时工做,稳定性第一。嗯,最后咱们还给这个小PC专门配了一个UPS,主要是维持稳定的电源。

说到这里,你们有注意到什么没有?

传统的PC,其实并非计算机的所有,计算机造出来,天生就是用来改变人们生活的,PC仅仅是其中一个通用化的表明,它在设计之初,就是为了应对用户变幻无穷的扩展需求,所以它强调开放性,有点忽视稳定性。

其实IBM最开始设计PC架构时,更可能是把它做为一个学习用机器开发出来的,或者说应对家庭平常计算,小规模计算开发的,你看它名字嘛,我的计算机,PC。

只是后来因为Intel和微软的力推,再加上业界众多厂商的推崇,PC成了事实上的通用计算机标准,才发展到今天。

但到了今天,当基础的CPU、内存、硬盘、GPU速度足够快,而且造价低廉,能够大规模应用到生产生活各个方面时,人们才发现,咱们有很好的原件,可是若是每一个设备都用PC的标准架构设计和生产的话,太贵了,也不必。

我很难想象,一个交通灯管理控制盒,我要图形用户界面干什么?还有,一个mp4,你能放电影播音乐就行了,我为何要为你设计插接口卡功能,来解决将来永远不可能存在的需求,好比说把你做为一个数据采集终端,读AD转换数值?

因此人们在最开始PC平台上的“加法”(不断扩展卡,扩展其应用)以后,又开始作“减法”,显卡不要,砍掉,硬盘不要,砍掉。。。

砍到最后你们发现,咱们还遵照这个PC架构作什么?能完成业务就行了,因而,从新设计一个标准,更加贴合实际应用的,更小更稳定更便宜的,这不是更好?

因而,arm就产生了。

而后,你们说,PC有些好的经验咱们仍是要学习,实际上是计算机领域的经验啦,要有个操做系统,它封装了不一样厂商不一样型号,可是功能类似的元件的差别性,提供统一的api界面,方便应用开发者作开发。

喏,嵌入式Linux就此产生。

这些东东,其实都是瓜熟蒂落的,只要沿着计算机几十年发展的路径看看就知道了。

我我的的理解,人类历史的发展,老是遵循“先解决有无问题,再解决好坏问题”这个客观规律的。嗯,这是我本身总结的哈,呵呵。

最开始计算设备很贵,因而先设计个通用的平台,你们都买得起,能够用它学会开发,这是PC,之后发现通用平台在解决具体实际问题时很差用,那就由设计一个专用平台,在拥有必定扩展性的基础上,强调稳定性,专注化。

你们以为呢?

因此我一直说,平台不重要,语言不重要,解决问题是关键

嗯,如今回到这个朋友的问题,嵌入式应用开发和PC上的应用开发,有多大差异?Android或者iPhone上开发个游戏,和PC上开发个游戏,有多大差异?

驱动,制造厂设计一款硬件,准备归入到某个嵌入式平台,你给嵌入式Linux开发一个设备驱动,以便在这个上面开发的应用程序能识别这个设备并用好它,这和咱们开发一块新的显卡,数据采集卡,插到PC上,为Windows写个驱动,有多大差异?

这也就是我前面说的“这个世界上,不存在真正的嵌入式开发!”的意义。

如今又不少培训班,专门打着嵌入式开发培训的旗号,嗯,3G开发也算,对于这类培训,个人理解不过是把通用的计算机软硬件设计知识,到嵌入式平台,或者更细化一点,3G手机平台上,作了一些具体的应用级调整,更增强调和突出了某些特性而已。

从知识体系上讲,这和普通大学的计算机软件专业课程安排,我我的的理解,并没有本质的不一样。

因此,对于但愿从事嵌入式开发的朋友们,我有这么几点建议,不必定准确哈,你们作个参考罢了。

一、没有真正意义上的特定类型开发,全部的开发,基于的知识、原理都差很少,你们要作的,是把今天的知识学好,学扎实。

二、开发人员,特别是程序员,天生就应该会抽象,抽象是咱们这个行业的重要特性,那么,开发抽象来看,其实你们都差很少。

三、嵌入式的特性是“”,即对某个系统,某个平台,某个知识点,要求理解特别“深刻”,能发现其性能的极致并展示出来,这是嵌入式本质的生存基础。所以,要求咱们有钻研精神,可以就一个问题探讨到极致。

四、技术能够“”,人不能够“太钻”,即视野不能窄了,嵌入式的应用,是要解决人们某个方面的问题,可是咱们知道,凡是涉及生活中的问题的,其知识面不可能窄了,你看一个电动车都涉及多少个专业的知识?嵌入式开发必定是合做开发,有软件,有硬件,有自动控制理论,有传输,有图形图像解码,一我的很难作到面面俱到,所以,要善于跨专业学习,起码要理解别人行业的特性,合做中才能取得好效果,不能自顾自。

五、嵌入式开发容易取得好的回报,可是不容易出现我的英雄主义的成绩,这个心态要调整好,其实如今哪一个大点的系统,是一我的能完成的,要有团队合做精神,作人要低调一点,虚心一点,多学一点,就能越走越远。

六、嵌入式开发更像软件开发的综合性学科展示,对我的能力提出了更高的要求,可是回报很丰厚,这一行是能够轻易产生百万富翁的,也是能让一我的作一生开发不愁没饭吃的,可是,没有付出就没有收获,嵌入式开发要成才,其学习曲线比单纯的软件开发陡不少,要作好吃苦的思想准备。

七、嵌入式求职建议不要把目光放在传统意义上的IT企业,不少制造业,不少设计研究单位,包括不少国企,他们都须要嵌入式综合性人才,所以,找工做时不妨眼光看开一点,说不定机会更好。

嗯,先这么多吧,我也是一边想一边写,可能不必定全面,你们先看看吧。

有问题再问。

肖舸(QQ:712123)