嵌入式入門

2023-01-21 11:15:03 字數 5382 閱讀 1865

微控制器原理及接**術、微機原理及接**術、c語言、資料結構與演算法、作業系統原理、編譯原理

一、嵌入式系統的概念

著重理解」嵌入」的概念

主要從三個方面上來理解。

1、從硬體上,將基於cpu的處圍器件,整合到cpu晶元內部,比如早期基於x86體系結構下的計算機,cpu只是有運算器和累加器的功能,一切晶元要造外部橋路來擴充套件實現,象串列埠之類的都是靠外部

16c550/2的串列埠控制器晶元實現,而目前的這種串列埠控制器晶元早已整合到cpu內部,還有pc機有顯示卡,而多數嵌入式處理器都帶有lcd控制器,但某種意義上就相當於顯示卡。比較高階的arm類intel xscale架構下的ixp網路處理器cpu內部整合pci控制器(可配成支援4個pci從裝置或配成自身為cpi從裝置);還整合3個npe網路處理器引擎,其中兩個對應於兩個mac位址, 可用於閘道器交換用,而另外乙個npe網路處理器引擎支援dsl,只要外面再加個phy晶元即可以實現dsl上網功能。ixp系列最高主頻可以達到1.

8g,支援2g記憶體,1g×10或10g×1的乙太網口或febre channel的光通道。ixp系列應該是目標基於arm體系統結構下由 intel進行整合後成xscale核心的最高的處理器了。

2、從軟體上前,就是在定製作業系統核心裡將應用一併選入,編譯後將核心**到rom中。而在定製作業系統核心時所選擇的應用程式元件就是完成了軟體的」嵌入」,比如wince在核心定製時,會有相應選擇,其中就是wordpad,pdf,mediaplay等等選擇,如果我們選擇了,在ce啟動後,就可以在介面中找到這些東西,如果是以前pc上將的windows作業系統,多半的東西都需要我們重新再裝。

3、把軟體核心或應用檔案系統等東西燒到嵌入式系統硬體平台中的rom中就實現了乙個真正的」嵌入」。

以上的定義是我在6、7年前給嵌入式系統下自話側重於理解型的定義,書上的定義也有很多,但在這個領域範圍內,誰都不敢說自己的定義是十分確切的,包括那些專家學者們,畢竟嵌入式系統是計算機範疇下的一門綜合性學科。

二、嵌入式系統的分層與專業的分類。

嵌入式系統分為4層,硬體層、驅動層、作業系統層和應用層。

1、硬體層,是整個嵌入式系統的根本,如果現在微控制器及介面這塊很熟悉,並且能用c和組合語言來程式設計的話,從嵌入式系統的硬體層走起來相對容易,硬體層也是驅動層的基礎,乙個優秀的驅動工程師是要能夠看懂硬體的電路圖和自行完成cpld的邏輯設計的,同時還要對作業系統核心及其排程性相當的熟悉的。但硬體平台是基礎,增值還要靠軟體。

硬體層比較適合於,電子、通訊、自動化、機電一體、資訊工程類專業的人來搞,需要掌握的專業基礎知識有,微控制器原理及接**術、微機原理及接**術、c語言。

2、 驅動層,這部分比較難,驅動工程師不僅要能看懂電路圖還要能對作業系統核心十分的精通,以便其所寫的驅動程式在系統呼叫時,不會獨佔作業系統時間片,而導至其它任務不能動行,不懂作業系統核心架構和實時排程性,沒有良好的驅動編寫風格,按大多數書上所說新增的驅動的方式,很多人都能做到,但可能連個初級的驅動工程師的水平都達不到,這樣所寫的驅動在應用呼叫時就如同windows下我們開啟乙個程式執行後,再開啟乙個程式時,要不就是中斷以前的程式,要不就是等上一會才能執行後來開啟的程式。想做個好的驅動人員沒有

三、四年功底,作業系統核心不研究上幾編,不是太容易成功的,但其工資在嵌入式系統四層中可是最高的。

驅動層比較適合於電子、通訊、自動化、機電一體、資訊工程類專業尤其是計算機偏體系結構類專業的人來搞,除硬體層所具備的基礎學科外,還要對資料結構與演算法、作業系統原理、編譯原理都要十分精通了解。

3、作業系統層,對於作業系統層目前可能只能說是簡單的移植,而很少有人來自已寫作業系統,或者寫出缺胳膊少腿的作業系統來,這部分工作大都由驅動工程師來完成。作業系統是負責系統任務的除錯、磁碟和檔案的管理,而嵌入式系統的實時性十分重要。據說,xp作業系統是微軟投入300人用兩年時間才搞定的,總時工時是600人年,中科院軟體所自己的女媧hopen作業系統估計也得花遇幾百人年才能搞定。

因此這部分工作相對來講沒有太大意義。

4、應用層,相對來講較為容易的,如果會在windows下如何進行程式設計介面函式呼叫,到作業系統下只是編譯和開發環境有相應的變化而已。如果涉及j**e方面的程式設計也是如此的。嵌入式系統中涉及演算法的由專業演算法的人來處理的,不必歸結到嵌入式系統範疇內。

但如果涉及嵌入式系統下面嵌入式資料庫、基於嵌入式系統的網路程式設計和基於某此應用層面的協議應用開發(比如基於sip、h.323、astrisk)方面又較為複雜, 並且有難度了。

三、目標與定位。

先有目標,再去定位。

學 arm,從硬體上講,一方面就是學習介面電路設計,另一方面就是學習彙編和c語言的板級程式設計。如果從軟體上講,就是要學習基於arm處理器的作業系統層面的驅動、移植了。這些對於初學都來說必須明確,要麼從硬體著手開始學,要麼從作業系統的熟悉到應用開始學,但不管學什麼,只要不是純的作業系統級以上基於 api的應用層的程式設計,硬體的暫存器類的東西還是要能看懂的,基於板級的彙編和c程式設計還是要會的。

因此針對於嵌入式系統的硬體層和驅動程的人,arm的介面電路設計、arm的c語言和組合語言程式設計及除錯開發環境還是需要掌握的。

因此對於初學者必然要把握住方向,自己的目標是什麼,自己要在那一層面上走。然後再著手學習較好,與arm相關的嵌入式系統的較為實際的兩個層面硬體層和驅動層,不管學好了那一層都會很有前途的。

如果想從嵌入式系統的應用層面的走的話,可能與arm及其它體系相去較遠,要著重研究基嵌入式作業系統的環境應用與相應開發工具鏈,比如wince作業系統下的evc應用開發(與windows下的vc相類似),如果想再有突破就往某些音**類的協議上靠,比如voip領域的基於sip或h.323協議的應用層開發,或是基於嵌入式網路資料庫的開發等等。

對於初學者來講,要量力而行,不要認為驅動層工資高就把它當成方向了,要結合自身特點,嵌入式系統四個層面上那個層面上來講都是有高人存在,當然高人也對應的高工資,我是做硬體層的,以前每月工資中個人所得稅要被扣上近3千大元,當然我一方面充當工程師的角色,一方面充當主管及人物的角色,兩個職位我乙個人幹,但上班時間就那些。硬體這方面上可能與我pk的人很少了,才讓我拿到那麼多的工資。

四、開發系統選擇。

很多arm初學者都希望有一套自己能用的系統,但他們住住會產生一種錯誤認識就是認為處理器版本越高、效能越高越好,就象很多人認為arm9與arm7好, 我想對於初學者在此方面以此入門還應該理智,開發系統的選擇最終要看自己往嵌入式系統的那個方向上走,是做驅動開發還是應用,還是做嵌入式系統硬體層設計與板級測試。如果想從作業系統層面或應用層面上走,不管是驅動還是應用,那當然處理器效能越高越好了,但這個東西自學,有十分大的困難,不是幾個月或半年或是一年二年能搞定的事。

在某種意義上請,arm7與9的差別就是在某些功能指令集上豐富了些,主頻提高一些而已,就比如286和386。對於使用者來講可能覺查不到什麼,只能是感覺速度有些快而已。

arm7比較適合於那些想從硬體層面上走的人,因為arm7系列處理器內部帶mmu的很少,而且比較好控制,就比如s3c44b0來講,可以很容易將 cache關了,而且內部介面暫存器很容易看明白,各種介面對於用硬體程式控制或axd單步命令列指令都可以控制起來,基於51微控制器的思想很容易能把他搞懂,就當成個32位的微控制器,從而消除很多51工程師想轉為嵌入式系統硬體arm開發工程師的困惑,從而不會被業界某此不是真正懂嵌入式爛公司帶到作業系統層面上去,讓他們望而失畏,讓業界更加缺少這方面的人才。

而嵌入式系統不管硬體設計還是軟體驅動方面都是十分注重介面這部分的,選擇平台還要考察乙個處理器的外部資源,你接觸外部資源越多,越熟悉他們那你以後就業成功的機率就越高,這就是招聘時所說的有無」相關技能」,因為乙個人不可能在短短幾年內把所有的處理器都接觸一遍,而招聘單位所用的處理器就可能是我們完全沒有見過的,就拿台灣數十家小公司(市價幾千萬)的公司生產的arm類處理器,也很好用,但這些東西通用性太差,用這些處理器的公司就只能招有相關工作經驗的人了,那什麼是相關工作經驗,在硬體上講的是外圍介面設計,在軟體上講是作業系統方面相關介面驅動及應用開發經驗。我從業近十年,2023年arm出現,我一天始做arm7,然後直接跑到了xscale(這個板本在arm10-11之間),一做就是五年,招人面試都不下數百人,在這些方面還是深有體會的。

三星的s3c44b0對初學者來說比較合適,為什麼這麼說哪?因為介面資源比較豐富,技術成熟,資料較多,應該十分適合於初學者,有問題可能很容易找人幫且解決,因為大多數人都很熟悉,就如同51類的微控制器,有n多位專家級的人物可以給你幫忙,相關問題得以很快解答,所然業界認為這款arm都做用得爛了,但對於初學者來,就卻是件好事。

因此開發系統的選擇,要看自己的未來從來目標方向、要看開發板介面資源、還要看業界的通用性。

五、成為高階嵌入式系統硬體工程師要具備的技能

對於硬體來講有幾個方向,就單純訊號來分為數字和模擬,模擬比較難搞,一般需要很長的經驗積累,單單乙個阻值或容值的精度不夠就可能使訊號偏差很大。因此年輕人搞的較少,隨著技術的發展,出現了模擬電路數位化,比如手機的modem射頻模組,都採用成熟的套片,而當年國際上只有兩家公司有此技術,自我感覺模擬功能不太強的人,不太適合搞這個,如果真能搞定到手機的射頻模組,只要達到一般程度可能月薪都在15k以上。

另一類就是數字部分了,在大方向上又可分為51/arm的微控制器類,dsp類,fpga類, 國內fpga的工程師大多是在ic設計公司從事ip核的前端驗證,這部分不搞到門級,前途不太明朗,即使做個ic前端驗證工程師,也要搞上幾年才能勝任。 dsp硬體介面比較定型,如果不向驅動或是演算法上靠攏,前途也不會太大。而arm微控制器類的內容就較多,業界產品佔用量大,應用人群廣,因此就業空間極大,而硬體設計最體現水平和水準的就是介面設計這塊,這是各個高階硬體工程師相互pk,判定水平高低的依據。

而介面設計這塊最關鍵的是看時序,而不是簡單的連線,比如pxa255處理器i2c要求速度在100kbps,如果把乙個i2c外圍器件,最高還達不到100kbps的與它相接,必然要導致設計的失敗。這樣的情況有很多,比如51微控制器可以在匯流排接 lcd,但為什麼這種lcd就不能掛在arm的匯流排上,還有arm7匯流排上可以外接個winband的sd卡控制器,但為什麼這種控制器接不到arm9或是xscale處理器上,這些都是問題。因此介面並不是一種簡單的連線,要看時序,要看引數。

乙個優秀的硬體工程師應該能夠在沒有參考方案的前提下設計出乙個在成本和效能上更加優秀的產品,靠現有的方案,也要進行適當的可行性裁剪,但不是胡亂的來,我遇到乙個工程師把方案中的5v變1.8v的dc晶元, 直接更換成ldo,有時就會把cpu燒上幾個。前幾天還有人希望我幫忙把他們以前基於pxa255平台的手持gps裝置做下程式優化,我問了一下情況,地圖是存在sd卡中的,而sd卡與pxa255的mmc控制器間採用的spi介面,因此導致地圖讀取速度十分的慢,這種情況是設計中嚴重的缺陷,而不是程式的問題,因此我提了幾條建議,讓他們更新試下再說。

因此想成為乙個優秀的工程師,需要對系統整體性的把握和對已有電路的理解,換句話說,給你一套電路圖你終究能看明白多少,看不明白80%以上的話,說明你離優秀的工程師還差得遠哪。其次是電路的除錯能力和審圖能力,但最最基本的能力還是原理圖設計pcb繪製,邏輯設計這塊。這是指的硬體設計工程師,從上面的硬體設計工程師中還可以分出ecad工程師,就是專業的畫pcb板的工程師,和emc設計工程師,幫人家解決emc的問題。

硬體工程師再往上就是板級測試工程師,就是c語功底很好的硬體工程師,在電路板除錯過程中能通過自已編寫的測試程式對硬體功能進行驗證。然後再交給基於作業系統級的驅動開發人員。

嵌入式如何入門

進入嵌入式的大門1年左右。其中的辛酸只有自己能夠體會,以下是自己的一些體會,希望能幫助到想從事嵌入式開發的人。首先,這個行業現在比較流行的大專案方向 路由器 dtv 手機和更深入的智慧型作業系統。其次,如果你不是對嵌入式很有興趣,我覺得你應該換方向。這個高薪的行業,必然造就你多的付出。請各位先想清楚...

嵌入式總結

什麼叫嵌入式系統 以應用為中心 以計算機技術為基礎 軟體硬體可裁剪 適應應用系統對功能 可靠性 成本 體積 功耗嚴格要求的專用計算機系統。什麼叫嵌入式處理器?嵌入式處理器分為哪幾類?嵌入式處理器是為完成特殊的應用而設計的特殊目的的處理器。分為四類 1 嵌入式微處理器 embedded micropr...

嵌入式總結

第三部分 arm處理器特點。功耗低 成本低 效能高 支援thumb 16位 arm 32位 雙指令集 cortex支援thumb 2 16 32位混合指令系統 指令長度固定 32位 16位 大量使用暫存器,指令執行速度更快,都可用於多種用途 定址方式靈活簡單,執行效率高 arm處理器的各系列情況。a...