本科生學習fpga,dsp,arm嵌入式系統前途分析

本科生學習fpga,dsp,arm嵌入式系統前途分析

      本科生的話,建議做軟件方向的嵌入式系統,即利用現有的芯片和操作系統(開源的非開源的都可以)進行開發。嵌入式沒有競爭相對小的方向,不管你搞什麼,今天無限風光,明天就有可能寄人籬下。希望樓主在選擇之前首先端正一下態度,選擇了電子工程師這條路,就沒有“競爭小”這項選擇。前途的話在個人,你要是真是個牛逼人物撿垃圾也能撿出不一樣的精彩。

根據樓主本科生的情況,DSP還是不要碰了。這玩意單純從編程角度來講沒有任何難度,其精髓在於你編程實現的算法.想把DSP用好,首先你將來從事的行業必須有大規模計算的需求,而且這種計算需求從某種程度上對時間要求比較高。比如通信,實時視頻處理等方面。有些應用,比如地質數據分析,遙感數據分析,大規模計算的需求是有了,但是一個星期出結果和一年出結果沒啥差別,那這種也就不需要DSP了,不如直接上PC來的順手。其次應用DSP人員必須對自己行業所需要的專業知識極爲精通,注意!這裏的專業知識不是指什麼數模電微機原理等“專業課”。而是解決本行業可能遇到的問題所需的知識。具體例子不好列舉,就拿一般看得到的教材來說,很簡單的DSP應用——FFT,你說你要是連FFT怎麼回事兒都不知道,用在什麼場合也沒概念,什麼時候用也說不清楚還搞什麼DSP啊?DSP這東西跟什麼學歷沒有太大關係,本科生也可以做得很好,關鍵是自己有沒有足夠的知識來用好它。

FPGA相對DSP來講稍微簡單一點,當然,視個人情況而定。比起動不動就FIR啊IIR啊橢圓濾波器啊Butterworth啊什麼的,我更喜歡幾百萬門的與非邏輯。基本的邏輯電路設計,本科時候的數字電路就可以夠用了。不過大的趨勢還是做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腳本等等,所以說學習嵌入式的週期較長,門檻較高,自學的話更是需要較強的學習能力和專業功底。只要能堅持下來一定會取得成功!

不過關於嵌入式的學習,還是要給你一些建議,嵌入式技術的門檻是比較高的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章