嵌入式門檻雖然較高,但也跟其餘事物同樣,並非牢不可破。只要咱們用心去對待,冬雪終將化去,春風定會吹來。
具體步驟以下:
1、《C語言》第二版 譚浩強 ; 《C程序設計語言》第二版 徐寶文譯 機械工業出版社
你能區分開指針數組和數組指針嗎?你知道函數指針嗎?
你能區分開定義一個變量時系統給它分配的空間與用malloc()函數給一個變量分配的空間有什麼不同嗎?
2、《數據結構》C語言版 黃國愉、葉乃青編 清華大學出版社
你能合上書本,用C語言實現書中的單鏈表、雙鏈表數據結構嗎?
3、《實用C++程序設計》第二板 中國電力出版社 Steve_Oualline著
此階段主要是學習其面向對象的編程思想,加深對C語言和數據結構的理解。
4、學習單片機,最好能找個前輩帶一帶。
你能用51單片機作出同樣實際的東西嗎?即便它再簡單!
要注意加深對中斷的理解。
5、學習ARM單片機。
(1)、細讀《ARM微控制器基礎與實戰》周立工編寫(注:即便你不用書中的開發板)
(2)、細讀相關芯片的原版英文文檔。如:arm920TE.pdf S3C2410_1.2.pdf
6、學習uCOS!!操做系統。
(1)、細讀《嵌入式實時操做系統uC/OS-!!》第二版 召貝貝譯
你能把uCOS!!移植到本身的平臺上嗎?
(2)、能編寫在uCOS!!操做系統環境下運行的針對具體硬件的驅動程序
7、熟悉Linux環境,學習Linux環境編程,學習交叉編程
(1)、細讀《linux命令大全.pdf》
(2)、細讀《GNU Make 使用手冊(中譯版).pdf》
(3)、學習建立交叉編程環境.
8、學習Linux操做系統。
(1)、《UNIX環境高級編程》
(2)、能夠到一些好的網站下載一些比較好的書籍
(3)、細讀《linux內核徹底註釋》
(4)、細讀《understanding the linux kernel 2》
(5)、利用源代碼閱讀利器工具"Source Insight"進行真正的linux內核原碼刨析
(6)、最後進行內核移植,並能編寫在linux操做系統環境下運行的針對具體硬件的驅動程序
9、學習Linux設備驅動編寫。可參考《Linux設備驅動程序》
10、複習C++,學習用QT進行圖形界面編程
(1)、細讀《QT編程寶典》
(2)、學會經過查看QT電子文檔進行QT GUI實地編程
(3)、學習交叉編程.(其實就是把命令qmake變爲tmake)
11、固然,你也可學習一下PCB的製做和設計一個本身的CPU(即軟殼)
在嵌入式軟件方面最重要的課程包括:
(1) 嵌入式微處理器結構與應用:
這是一門嵌入式硬件基礎課程,咱們說過,嵌入式是軟硬件結合的技術,搞嵌入式軟件的人應對ARM處理器工做原理和接口技術有充分了解,包括ARM的彙編指令系統。若不瞭解處理器原理,怎麼能控制硬件工做,怎麼能寫出節省內存又運行高速的最優代碼(嵌入式軟件設計特別講究時空效率),怎麼能寫出驅動程序(驅動程序都是與硬件打交道的)?不少公司招聘嵌入式軟件人員時都要求熟悉ARM處理器,未來若同窗到公司中從事嵌入式軟件開發,公司都會給你一本該設備的硬件規格說明書 (xxx Specification),你必須能看懂其中的內存分佈和端口使用等最基本的說明(就像x86彙編同樣),不然怎麼設計軟件。有些同窗以爲嵌入式處理 器課程較枯燥,這主要是硬件課程都較抽象的緣由。還有同窗對ARM彙編不感興趣,覺得嵌入式開發用C語言就足夠了。其實不該僅是將彙編語言當成一個程序設計語言,學彙編主要是爲了掌握處理器工做原理的。一個不熟悉彙編語言的人,怎麼能在該處理器寫出最優的C語言代碼。在嵌入式開發的一些關鍵部分,有時還必須寫彙編,如Bootloader等(可能還包括BSP)。特別是在對速度有極高要求的場合(如DSP處理器的高速圖像採集和圖像解壓縮),目前還會用到彙編寫程序的,儘管用到的機會相對C要小得多。當你在一個嵌入式公司工做時,在查看描述原理的手冊時,可能不少都是用匯編描述的,這是由於不少硬件設計人員只會寫或者喜歡用匯編描述,此時你就必須看懂彙編程序,不然軟硬件人員可能就沒法交流。不少嵌入式職位招聘時都要求熟悉彙編。
[小知識] 目前嵌入式處理器常見的有ARM、PowerPC、MIPS、Motorola 68K、ColdFire (冷火)等,但ARM佔據了絕對主流(有資料說手機中幾乎90%都是ARM處理器)。ARM是一個只賣知識產權的公司,目前得到購買了ARM CPU核受權許可的大公司不少,包括Intel、Samsung、Amstel、Motorola、Philip等,他們都在ARM CPU核的基礎上進行了一些外圍擴展,造成本身的處理器(如Samsung S3C2410,Motorola i.MXL9328等處理器都是採用ARM 9內核,指令一級是相同的)。而衆多中小公司又購買了這些處理器,設計了各類各樣的開發板,如華恆等國內不少著名嵌入式公司都生產基於SamsungS3C2410的開發板,供最終用戶使用或供教學實驗。在ARM這個食物鏈上,ARM公司是大魚,Intel、Samsung等公司是小魚,而華恆等則是蝦米,最終用戶(咱們這些要採購嵌入式開發板的)則是喂蝦米的。Intel早期生產的是低端ARM(Strong ARM,至關於ARM 7),如今轉向主要生產高端ARM(即Intel Xscale處理器,屬於ARMv5家族,主要用在高端PDA上,如HP和DELL生產的PDA都採用Intel Xscale,價格較高)。目前應用最多的是ARM 7和ARM 9兩類處理器。 ARM 7較便宜,可跑uclinux(是一個不支持高級內存管理功能的嵌入式Linux系通通)、Vxworks、uc/os II等實時操做系統,但因處理器不帶內存管理單元MMU(無內存分頁和地址映射機制,因此不能使用虛擬內存),因此不能跑Windows CE,另外通用Linux中的某些內存管理功能也不能用在ARM 7上。ARM 9大都是一個帶MMU功能的高端處理器,可跑WinCE或通用Linux的大多數功能。ARM7和ARM9的區別是在與體系結構上,前者是馮?諾伊曼結 構,後者是哈佛結構——指令和數據總線是分開的。以上是個人一點了解,可能有不對的地方。咱們學院有十幾套ARM 7開發系統(採用Samsung S3C44b0x開發板,主要用於嵌入式處理器結構、實時操做系統等課程實驗用),ARM 9的系統好象也已經到了(採用的芯片我不知道也沒去問),還有之前的十幾套MPC860開發板(據說價格都很貴,很容易損壞),同窗應愛護使用和珍惜這樣 的實驗機會。
(2) 嵌入式操做系統類課程
除了WinCE的實時性稍差外,大多數嵌入式操做系統的實時性都很強,因此也可稱爲實時操做系統Real Time Operating System.從事嵌入式的人至少須掌握一個嵌入式操做系統,這在嵌入式的全部技術中是最爲關鍵的了。目前最重要的RTOS主要包括:
第一類、傳統的經典RTOS:最主要的即是Vxworks操做系統,以及其Tornado開發平臺。Vxworks因出現稍早,實時性很強(聽說可在1ms內響應外部事件請求),而且內核可極微(聽說最小可8K),可靠性較高等,因此在北美,Vxworks佔據了嵌入式系統的多半 疆山。特別是在通訊設備等實時性要求較高的系統中,幾乎非Vxworks莫屬。Vxworks的不少概念和技術都和Linux很相似,主要是C語言開發。像Bell- alcatel、Lucent、華爲等通訊企業在開發產品時,Vxworks用得不少。但Vxworks因價格很高,因此一些小公司或小產品中每每用不 起。目前不少公司都在往嵌入式Linux轉(據說華爲目前正在這樣轉)。但不管如何,Vxworks在一段長時間內還是不可動搖的。與Vxworks相似 的稍有名的實時操做系統還有pSOS、QNX、Nucleus等RTOS。
第二類、嵌入式Linux操做系統:Linux的前途除做爲服務器操做系統外,最成功的即是在嵌入式領域的應用,緣由固然是免費、開源、支持軟件多、呼擁者衆,這樣嵌入式產品成本會低。Linux自己不是一個爲嵌入式設計的操做系統,不是微內核的,而且實時性不強。
目前應用在嵌入式領域的Linux系統主要有兩種:
一種是專爲嵌入式設計的已被裁減過的Linux系統,最經常使用的是uClinux(不帶MMU功能),目前佔較大應用份額,可在ARM7上跑;另外一種是跑在 ARM 9上的,通常是將Linux2.4.18內核移植在其上,可以使用更多的Linux功能(固然uClinux更可跑在ARM 9上)。不少人預測,嵌入式Linux預計將佔嵌入式操做系統的50%以上份額,很是重要。缺點是熟悉Linux的人太少,開發難度稍大。另外,目前咱們 能發現不少教材和不少大學都以ucOS/II爲教學用實時操做系統,這主要是因爲ucOS/II較簡單,且開源,很是適合入門者學習實時操做系統原理,但 因爲ucOS/II功能有限,實用用得較少。何況熟悉了Linux開發,不只在嵌入式領域有用,對開發Linux應用軟件,對加深操做系統的認識也有幫 助,可謂一舉多得。據我所知,目前Intel、Philip都在大搞ARM+LINUX的嵌入式開發,Fujitum則是在本身的處理器上大搞Linux 開發。目前在嵌入式Linux領域,如下幾個方面的人特別難找,一是能將Linux移植到某個新型號的開發版上;二是能寫Linux驅動程序的人;三是熟悉Linux內核裁減和優化的人。不過LINUX有一個硬傷,就是沒有WINDOWS那樣的友好方便美觀
的交互界面,否則微軟帝國早就守不住了。
第三類、 Windows CE嵌入式操做系統:Microsoft也看準了嵌入式的巨大市場,MS永遠是最厲害的,WinCE出來只有幾年時間,但目前已佔據了很大市場份額,特別是在PDA、手機、顯示儀表等界面要求較高或者要求快速開發的場合,WinCE目前已很流行(聽說有一家賣工控機的公司板子賣得太好,以致來不及爲客戶裁減WinCE)。WinCE目前主要爲4.2版(.NET),開發平臺主要爲WinCE Platform Builder,有時也用EVC環境開發一些較上層的應用,因爲WinCE開發都是你們熟悉的VC++環境,因此我院學過Windows程序設計課程的同 學都不會有多大難度,這也是WinCE容易被人們接受的緣由,開發環境方便快速,微軟的強大技術支持,WinCE開發難度遠低於嵌入式Linux。對於急於完成,不想拿嵌入式Linux冒險的開發場合,WinCE是最合適了(找嵌入式Linux的人可沒那麼好找的),畢竟公司不能像學生學習那樣試試看,保證開發成功更重要。根據不一樣的側重點,WinCE還有兩個特殊版本,一個是MS PocketPC操做系統專用於PDA上(掌上電腦),另外一個是MS SmartPhone操做系統用於智能手機上(帶PDA功能的手機),二者也都屬於WinCE平臺。在PDA和手機市場上,除WinCE外,著名的PDA 嵌入式操做系統還有Palm OS(因出現很早,頗有名)、Symbian等,但在WinCE的強勁衝擊下,Palm和Symbian來日還能有多長?同窗學過VC++後再學 WinCE,很是方便天然,經過學習WinCE一樣也可瞭解嵌入式軟件的通常開發過程,對Linux有害怕心理的同窗也很合適。很顯然,嵌入式Linux 永遠不可能替代WinCE,並且未來誰佔份額大還很難講,畢竟不少人更願意接受MS的平臺,就像各國政府都在大力推LINUX已好長時間,但你能看到幾個 在PC機上真正使用LINUX的用戶?據我觀察,目前在嵌入式平臺上,LINUX是叫得最響,但仍是WinCE實際用得更多.嵌入式LINUX可能更多地是一些有長遠產品計劃的公司,爲下降成本而進行長遠考慮.WinCE和多媒體(如MPEG技術)是微軟亞洲工程院目前作得較多的項目領域之 一,如今社會很須要精通WinCE的人。如今有WINCE的智能手機,金山詞霸、WORD、EXCEL、REGEDIT等竟然都有 smartphone版的,PC上的MP3、DOC等竟然在download時均可被自動轉換成smartphone格式,很爽的。徹底可用 Windows CE本身開發一些須要的程序download到本身的手機上。如今市面銷售PDA智能手機火爆,MS老是財源滾滾。
總結關於嵌入式操做系統類課程,若你以爲本身功底較深且能鑽研下去,則可去學嵌入式Linux;若你以爲本身VC++功底較好且想短平快地學嵌入式開發,自學WINCE是很是好的選擇。
(3) 嵌入式開發的相關領域
搞嵌入式若能熟悉嵌入式應用的一些主要領域,這樣的人更受企業歡迎。主要的相關領域包括:
A、數字圖像壓縮技術:這是嵌入式最重要最熱門的應用領域之一,主要是應掌握MPEG編解碼算法和技術,如DVD、MP3、PDA、高精電視、機頂盒等都涉及MPEG高速解碼問題。
B、 通訊協議及編程技術:這包括傳統的TCP/IP協議和熱門的無線通訊協議。首先,大多數嵌入式設備都要連入局域網或Internet,因此首先應掌握 TCP/IP協議及其編程,這是需首要掌握的基本技術;其次,無線通訊是目前的大趨勢,因此掌握無線通訊協議及編程也是是很重要的。無線通訊協議包括無線 局域網通訊協議802.11系列,Bluetooth,以及移動通訊(如GPRS、GSM、CDMA等)。
C、網絡與信息安全技術:如加密技術,數字證書CA,以及各類網絡安全設備,包括硬件防火牆,入侵檢測IDS,還有防毒牆,IPS等,中國在這方面仍是沒有本身優點的,咱們陳院長好象正在往這方面發展.
D、 DSP技術:DSP是Digital Signal Process數字信號處理的意思,DSP處理器經過硬件實現數字信號處理算法,如高速數據採集、壓縮、解壓縮、通訊等。數字信號處理是電子、通訊等硬件 專業的課程,對於搞軟件的人若能瞭解一下最好。目前DSP人才較缺。若是有信號與系統、數字信號處理等課程基礎,對於學習MPEG編解碼原理會有很大幫助。
(4)嵌入式開發的相關硬件基礎
對於軟件工程專業的學生,從事嵌入式軟件開發,像數字電路、計算機組成原理、嵌入式微處理器結構等硬件課程是較重要的。另外,彙編語言、C/C++ 數據結構算法、特別是操做系統等軟件基礎課也是十分重要的。咱們的主要目地是能看懂硬件工做原理,但重點應是在嵌入式軟件,特別操做系統級軟件,那將是咱們的優點。咱們的研究生裏有些是學電子、通訊類專業過來的,有較好的模擬電路和單片機基礎,學嵌入式很是合適。嵌入式自己就是從單片機發展過來的,只是單片機不帶OS,而如今不少嵌入式應用愈來愈複雜,以致不得不引入嵌入式操做系統。另外,爲追求更高速的信號處理速度,如今在一些速度要求較高場合,有很多公司是將一些DSP算法,如MPEG壓縮解壓縮算法等用硬件來實現,這就涉及到HDL數字電路設計技術及其 FPGA/IP覈實現技術,這方面的人目前市場上也很缺。linux