本科生学习fpga,dsp,嵌入式操作系统哪个好
本科生的話,建議做軟件方向的嵌入式系統(tǒng),即利用現(xiàn)有的芯片和操作系統(tǒng)(開源的非開源的都可以)進行開發(fā)。嵌入式?jīng)]有競爭相對小的方向,不管你搞什么,今天無限風(fēng)光,明天就有可能寄人籬下。希望樓主在選擇之前首先端正一下態(tài)度,選擇了電子工程師這條路,就沒有“競爭小”這項選擇。前途的話在個人,你要是真是個牛逼人物撿垃圾也能撿出不一樣的精彩。
根據(jù)樓主本科生的情況,DSP還是不要碰了。這玩意單純從編程角度來講沒有任何難度,其精髓在于你編程實現(xiàn)的算法.想把DSP用好,首先你將來從事的行業(yè)必須有大規(guī)模計算的需求,而且這種計算需求從某種程度上對時間要求比較高。比如通信,實時視頻處理等方面。有些應(yīng)用,比如地質(zhì)數(shù)據(jù)分析,遙感數(shù)據(jù)分析,大規(guī)模計算的需求是有了,但是一個星期出結(jié)果和一年出結(jié)果沒啥差別,那這種也就不需要DSP了,不如直接上PC來的順手。其次應(yīng)用DSP人員必須對自己行業(yè)所需要的專業(yè)知識極為精通,注意!這里的專業(yè)知識不是指什么數(shù)模電微機原理等“專業(yè)課”。而是解決本行業(yè)可能遇到的問題所需的知識。具體例子不好列舉,就拿一般看得到的教材來說,很簡單的DSP應(yīng)用——FFT,你說你要是連FFT怎么回事兒都不知道,用在什么場合也沒概念,什么時候用也說不清楚還搞什么DSP啊?DSP這東西跟什么學(xué)歷沒有太大關(guān)系,本科生也可以做得很好,關(guān)鍵是自己有沒有足夠的知識來用好它。
FPGA相對DSP來講稍微簡單一點,當(dāng)然,視個人情況而定。比起動不動就FIR啊IIR啊橢圓濾波器啊Butterworth啊什么的,我更喜歡幾百萬門的與非邏輯?;镜倪壿嬰娐吩O(shè)計,本科時候的數(shù)字電路就可以夠用了。不過大的趨勢還是做SOC。SOC這個概念不難理解,簡單點說就是把你原來做的實驗?zāi)莻€PCB板換成硅片,把與外界的連線換成管腳。用芯片做了原來電路板做的工作。單純組建一套片上系統(tǒng)并不復(fù)雜,復(fù)雜的是這套系統(tǒng)的商業(yè)化成本。現(xiàn)在很多SOC設(shè)計里面大量應(yīng)用的現(xiàn)成的IP都是需要付費的。一方面原因是如果自己設(shè)計,周期和風(fēng)險就會成倍放大,另一方面針對某些功能的IP靠自己的力量也搞不出來。如果是學(xué)生或者獨立開發(fā)者,當(dāng)SOC進行到一定程度后就會感覺自己的開發(fā)寸步難行了。抬頭望去到處都是IP壁壘。想做出自己的東西真的很不容易。如果你的理論知識夠牛的話,可以自己設(shè)計IP也是一個挺好的出路。
不過這又回到了DSP的老話題:你的知識夠用嗎?以我們公司現(xiàn)在的視頻處理項目來講,實現(xiàn)的時候很簡單,就是一連串的矩陣轉(zhuǎn)換。問題是如果沒人告訴你這么做,你自己能想到嗎?如何把一個BMP或者PNG轉(zhuǎn)換為YUV或者YPbPr?數(shù)據(jù)如何壓縮?其實就是一堆色空間轉(zhuǎn)來轉(zhuǎn)去的。再比如讓你用高斯算子和拉普拉斯算子做一個當(dāng)前圖像的邊界檢測,怎么做?先不討論怎么做,麻煩問一下啥是高斯算子?歸根到底,又是高等數(shù)學(xué)和線性代數(shù)那一檔子事兒。按照中國當(dāng)前的國情,50%的本科生基本靠混,另外50%不甘墮落的上進青年中,有90%不重視理論知識。所以FPGA入門可以,做也不是不能做,想有前途?難。
這就是為什么建議你做嵌入式軟件的原因。軟件面比較廣,在你51單片機嵌入式編程的技術(shù)基礎(chǔ)上繼續(xù)深入嵌入式系統(tǒng)的應(yīng)用編程方向,一來上手快,理解概念好理解一些,二來對理論知識的要求不是那么嚴苛。雖然沒有理論知識你依然只是個代碼民工,但是嵌入式編程本身的靈活性從另一方面給了自己發(fā)展的空間,也就是說單純就代碼如何實現(xiàn)上自己也可以學(xué)到不少東西。所以軟件可以不限于某幾個行業(yè)而存在,而DSP和FPGA不行。如果可以參與一些開源的項目,對自己的提升就更大了。
總之,本科生的話,如果不準(zhǔn)備繼續(xù)深造而且考慮今后一定時間的發(fā)展的話,做嵌入式軟件比較合適。
?
?
搞嵌入式開發(fā)的人有兩類:一類是學(xué)電子工程、通信工程等偏硬件專業(yè)出身的人,他們主要是搞硬件設(shè)計,有時要開發(fā)一些與硬件關(guān)系最密切的最底層軟件,如BootLoader、 Board Support Package(像PC的BIOS一樣,往下驅(qū)動硬件,往上支持操作系統(tǒng)),最初級的硬件驅(qū)動程序等。他們的優(yōu)勢是對硬件原理非常清楚,不足是他們更擅長定義各種硬件接口,但對復(fù)雜軟件系統(tǒng)往往力不從心(例如嵌入式操作系統(tǒng)原理和復(fù)雜應(yīng)用軟件等)。
另一類是學(xué)軟件、計算機專業(yè)出身的人,主要從事嵌入式操作系統(tǒng)和應(yīng)用軟件的開發(fā)。如果學(xué)軟件的人對硬件原理和接口有較好的掌握,我們完全也可寫B(tài)SP和硬件驅(qū)動程序。嵌入式硬件設(shè)計完后,各種功能就全靠軟件來實現(xiàn)了,嵌入式設(shè)備的增值很大程度上取決于嵌入式軟件,這占了嵌入式系統(tǒng)的最主要工作(目前有很多公司將硬件設(shè)計包給了專門的硬件公司,稍復(fù)雜的硬件都交給臺灣或國外公司設(shè)計,國內(nèi)的硬件設(shè)計力量很弱,很多嵌入式公司自己只負責(zé)開發(fā)軟件,因為公司都知道,嵌入式產(chǎn)品的差異很大程度在軟件上,在軟件方面是最有"花頭"可做的),所以搞軟件的人完全不用擔(dān)心我們在嵌入式市場上的用武之地,越是智能設(shè)備越是復(fù)雜系統(tǒng),軟件越起關(guān)鍵作用,而且這是目前的趨勢。
如果是希望向嵌入式軟件方向發(fā)展的話,目前最常見的是嵌入式Linux方向,關(guān)注這個方向,我認為大概分3個階段:
1、嵌入式linux上層應(yīng)用,包括QT的GUI開發(fā)
2、嵌入式linux系統(tǒng)開發(fā)
3、嵌入式linux驅(qū)動開發(fā)
嵌入式目前主要面向的幾個操作系統(tǒng)是,LINUX,WINCE、VxWorks等等
Linux是開源免費的,而且其源代碼是開放的,更加適合我們學(xué)習(xí)嵌入式。
所以你可以嘗試以下路線:
(1) C語言是所有編程語言中的強者,單片機、DSP、類似ARM的種種芯片的編程都可以用C語言搞定),因此必須非常熟練的掌握。
推薦書籍:《The C Programming Language》 這本經(jīng)典的教材是老外寫的,也有中譯版本。
(2) 操作系統(tǒng)原理,是必需的,如果你是計算機專業(yè)畢業(yè)那也就無所謂了,如果是非計算機專業(yè)的就必須找一本比較淺顯的計算機原理書籍看一看,把啥叫“進程”“線程”“系統(tǒng)調(diào)度”等等基本問題搞清楚。
(3) Linux操作系統(tǒng)就是用C語言編寫的,所以你也應(yīng)該先學(xué)習(xí)下Linux方面的編程,只有你會應(yīng)用了,才能近一步去了解其內(nèi)核的精髓。
推薦書籍:《UNIX環(huán)境高級編程》(第2版)
(4) 了解ARM的架構(gòu),原理,以及其匯編指令,我們在嵌入式開發(fā)中,一般很少去寫匯編,但是最起碼的要求是能夠看懂a(chǎn)rm匯編。
(5) 系統(tǒng)移植的時候,就需要你從最下層的bootloader開始,然后內(nèi)核移植,文件系統(tǒng)移植等。而移植這部分對硬件的依賴是非常大的,其配置步驟也相對復(fù)雜,也沒有太多詳細資料。
(6) 驅(qū)動開發(fā)
linux驅(qū)動程序設(shè)計既是個極富有挑戰(zhàn)性的領(lǐng)域,又是一個博大精深的內(nèi)容。
linux驅(qū)動程序設(shè)計本質(zhì)是屬于linux內(nèi)核編程范疇的,因而是對linux內(nèi)核和內(nèi)核編程是有要求的。在學(xué)習(xí)前你要想了解linux內(nèi)核的組成,因為每一部分要詳細研究的話足夠可以擴展成一本厚書。
以上只不過是大概的框架,在實際的開發(fā)中還會涉及很多東西,比如:交叉編譯、makefile、shell腳本等等,所以說學(xué)習(xí)嵌入式的周期較長,門檻較高,自學(xué)的話更是需要較強的學(xué)習(xí)能力和專業(yè)功底。只要能堅持下來一定會取得成功!
不過關(guān)于嵌入式的學(xué)習(xí),還是要給你一些建議,嵌入式技術(shù)的門檻是比較高的
?
轉(zhuǎn)載于:https://www.cnblogs.com/steararre/archive/2012/03/13/2394005.html
總結(jié)
以上是生活随笔為你收集整理的本科生学习fpga,dsp,嵌入式操作系统哪个好的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ListView属性设置
- 下一篇: 模式 与 原则