本科⽣学习fpga,dsp,嵌⼊式操作系统哪个好
本科⽣的话,建议做软件⽅向的嵌⼊式系统,即利⽤现有的芯⽚和操作系统(开源的⾮开源的都可以)进⾏开发。嵌⼊式没有竞争相对⼩的⽅向,不管你搞什么,今天⽆限风光,明天就有可能寄⼈篱下。希望楼主在选择之前⾸先端正⼀下态度,选择了电⼦⼯程师这条路,就没有“竞争⼩”这项选择。前途的话在个⼈,你要是真是个⽜逼⼈物捡垃圾也能捡出不⼀样的精彩。
根据楼主本科⽣的情况,DSP还是不要碰了。这玩意单纯从编程⾓度来讲没有任何难度,其精髓在于你编程实现的算法.想把DSP⽤好,⾸先你将来从事的⾏业必须有⼤规模计算的需求,⽽且这种计算需求从某种程度上对时间要求⽐较⾼。⽐如通信,实时视频处理等⽅⾯。有些应⽤,⽐如地质数据分析,遥感数据分析,⼤规模计算的需求是有了,但是⼀个星期出结果和⼀年出结果没啥差别,那这种也就不需要DSP了,不如直接上PC来的顺⼿。其次应⽤DSP⼈员必须对⾃⼰⾏业所需要的专业知识极为精通,注意!这⾥的专业知识不是指什么数模电微机原理等“专业课”。⽽是解决本⾏业可能遇到的问题所需的知识。具体例⼦不好列举,就拿⼀般看得到的教材来说,很简单的DSP应⽤——FFT,你说你要是连FFT怎么回事⼉都不知道,⽤在什么场合也没概念,什么时候⽤也说不清楚还搞什么DSP啊?DSP这东西跟什么学历没有太⼤关系,本科⽣也可以做得很好,关键是⾃⼰有没有⾜够的知识来⽤好它。
嵌入式linux开发书籍 FPGA相对DSP来讲稍微简单⼀点,当然,视个⼈情况⽽定。⽐起动不动就FIR啊IIR啊椭圆滤波器啊Bu
tterworth啊什么的,我更喜欢⼏百万门的与⾮逻辑。基本的逻辑电路设计,本科时候的数字电路就可以够⽤了。不过⼤的趋势还是做SOC。SOC这个概念不难理解,简单点说就是把你原来做的实验那个PCB板换成硅⽚,把与外界的连线换成管脚。⽤芯⽚做了原来电路板做的⼯作。单纯组建⼀套⽚上系统并不复杂,复杂的是这套系统的商业化成本。现在很多SOC设计⾥⾯⼤量应⽤的现成的IP都是需要付费的。⼀⽅⾯原因是如果⾃⼰设计,周期和风险就会成倍放⼤,另⼀⽅⾯针对某些功能的IP靠⾃⼰的⼒量也搞不出来。如果是学⽣或者独⽴开发者,当SOC进⾏到⼀定程度后就会感觉⾃⼰的开发⼨步难⾏了。抬头望去到处都是IP壁垒。想做出⾃⼰的东西真的很不容易。如果你的理论知识够⽜的话,可以⾃⼰设计IP也是⼀个挺好的出路。
不过这⼜回到了DSP的⽼话题:你的知识够⽤吗?以我们公司现在的视频处理项⽬来讲,实现的时候很简单,就是⼀连串的矩阵转换。问题是如果没⼈告诉你这么做,你⾃⼰能想到吗?如何把⼀个BMP或者PNG转换为YUV或者YPbPr?数据如何压缩?其实就是⼀堆⾊空间转来转去的。再⽐如让你⽤⾼斯算⼦和拉普拉斯算⼦做⼀个当前图像的边界检测,怎么做?先不讨论怎么做,⿇烦问⼀下啥是⾼斯算⼦?归根到底,⼜是⾼等数学和线性代数那⼀档⼦事⼉。按照中国当前的国情,50%的本科⽣基本靠混,另外50%不⽢堕落的上进青年中,有90%不重视理论知识。所以FPGA⼊门可以,做也不是不能做,想有前途?难。
这就是为什么建议你做嵌⼊式软件的原因。软件⾯⽐较⼴,在你51单⽚机嵌⼊式编程的技术基础上继
续深⼊嵌⼊式系统的应⽤编程⽅向,⼀来上⼿快,理解概念好理解⼀些,⼆来对理论知识的要求不是那么严苛。虽然没有理论知识你依然只是个代码民⼯,但是嵌⼊式编程本⾝的灵活性从另⼀⽅⾯给了⾃⼰发展的空间,也就是说单纯就代码如何实现上⾃⼰也可以学到不少东西。所以软件可以不限于某⼏个⾏业⽽存在,⽽DSP和FPGA不⾏。如果可以参与⼀些开源的项⽬,对⾃⼰的提升就更⼤了。
总之,本科⽣的话,如果不准备继续深造⽽且考虑今后⼀定时间的发展的话,做嵌⼊式软件⽐较合适。
搞嵌⼊式开发的⼈有两类:⼀类是学电⼦⼯程、通信⼯程等偏硬件专业出⾝的⼈,他们主要是搞硬件设计,有时要开发⼀些与硬件关系最密切的最底层软件,如BootLoader、 Board Support Package(像PC的BIOS⼀样,往下驱动硬件,往上⽀持操作系统),最初级的硬件驱动程序等。他们的优势是对硬件原理⾮常清楚,不⾜是他们更擅长定义各种硬件接⼝,但对复杂软件系统往往⼒不从⼼(例如嵌⼊式操作系统原理和复杂应⽤软件等)。
另⼀类是学软件、计算机专业出⾝的⼈,主要从事嵌⼊式操作系统和应⽤软件的开发。如果学软件的⼈对硬件原理和接⼝有较好的掌握,我们完全也可写BSP和硬件驱动程序。嵌⼊式硬件设计完后,各种功能就全靠软件来实现了,嵌⼊式设备的增值很⼤程度上取决于嵌⼊式软件,这占了嵌⼊式系统的最主要⼯作(⽬前有很多公司将硬件设计包给了专门的硬件公司,稍复杂的硬件都交给台湾或国外公司
设计,国内的硬件设计⼒量很弱,很多嵌⼊式公司⾃⼰只负责开发软件,因为公司都知道,嵌⼊式产品的差异很⼤程度在软件上,在软件⽅⾯是最有"花头"可做的),所以搞软件的⼈完全不⽤担⼼我们在嵌⼊式市场上的⽤武之地,越是智能设备越是复杂系统,软件越起关键作⽤,⽽且这是⽬前的趋势。
如果是希望向嵌⼊式软件⽅向发展的话,⽬前最常见的是嵌⼊式Linux⽅向,关注这个⽅向,我认为⼤概分3个阶段:
1、嵌⼊式linux上层应⽤,包括QT的GUI开发
2、嵌⼊式linux系统开发
3、嵌⼊式linux驱动开发
嵌⼊式⽬前主要⾯向的⼏个操作系统是,LINUX,WINCE、VxWorks等等
Linux是开源免费的,⽽且其源代码是开放的,更加适合我们学习嵌⼊式。
所以你可以尝试以下路线:
(1) C语⾔是所有编程语⾔中的强者,单⽚机、DSP、类似ARM的种种芯⽚的编程都可以⽤C语⾔搞定),因此必须⾮常熟练的掌握。
推荐书籍:《The C Programming Language》 这本经典的教材是⽼外写的,也有中译版本。
(2) 操作系统原理,是必需的,如果你是计算机专业毕业那也就⽆所谓了,如果是⾮计算机专业的就必须⼀本⽐较浅显的计算机原理书籍看⼀看,把啥叫“进程”“线程”“系统调度”等等基本问题搞清楚。
(3) Linux操作系统就是⽤C语⾔编写的,所以你也应该先学习下Linux⽅⾯的编程,只有你会应⽤了,才能近⼀步去了解其内核的精髓。推荐书籍:《UNIX环境⾼级编程》(第2版)
(4) 了解ARM的架构,原理,以及其汇编指令,我们在嵌⼊式开发中,⼀般很少去写汇编,但是最起码的要求是能够看懂arm汇编。(5) 系统移植的时候,就需要你从最下层的bootloader开始,然后内核移植,⽂件系统移植等。⽽移植这部分对硬件的依赖是⾮常⼤的,其配置步骤也相对复杂,也没有太多详细资料。
(6) 驱动开发
linux驱动程序设计既是个极富有挑战性的领域,⼜是⼀个博⼤精深的内容。
linux驱动程序设计本质是属于linux内核编程范畴的,因⽽是对linux内核和内核编程是有要求的。在学习前你要想了解linux内核的组成,因为每⼀部分要详细研究的话⾜够可以扩展成⼀本厚书。
以上只不过是⼤概的框架,在实际的开发中还会涉及很多东西,⽐如:交叉编译、makefile、shell脚本等等,所以说学习嵌⼊式的周期较长,门槛较⾼,⾃学的话更是需要较强的学习能⼒和专业功底。只要能坚持下来⼀定会取得成功!
不过关于嵌⼊式的学习,还是要给你⼀些建议,嵌⼊式技术的门槛是⽐较⾼的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论