怎么學習嵌入式:如果是大學生,請再學好以下課程
1、精通c語言、數據結構 、計算機原理(包括匯編的)、編譯原理 、操作系統
先做以上的,別著急!要做好嵌入式工程師請遠離浮躁!雖科目眾多,不一定全學,可根據需要選修。主攻書籍:the c programming language、數據結構。
如果你嚴厲的覺得覺得你學的可以了,請考慮以下問題:不參考任何代碼的情況下,能自己寫鏈表嗎?樹的遍歷呢?圖的最短路徑怎么實現?能自己寫小型搶占式內核嗎?如何用c實現語法分析,詞法分析?
ps:以上四門課是嵌入式大神必修課!
2、然后就可以搞塊開發板了,只提一點:先搞裸機(請自動把這句話復述三遍)。linux接觸越早越好,命令越熟越好,vim操作越眼花繚亂越好…
先搞裸機可以考慮51系列也未嘗不可,可買個板子,也可以直接用proteus仿真。了解下什么是IO、串口通信、中斷等,最好用模擬時序的方式用IO引腳寫個iic和spi的驅動。在51上不要花太多時間,新手一個月左右吧,(假如我上面說的基礎你學的OK的話,視自身學習能力而定)。
3、然后你可以學習一下mcu或處理器了,建議是ARM,因為你用別的架構會發現板子少的可憐,且價格也貴。建議先玩裸機,還是和51一樣,從點燈開始熟悉。請注意:最好不要一上來就鉆到里面把所有的模塊都整一遍,因為那樣好費時間(這里說的不是浪費),不是不可以,但效果我感覺不一定是最好的。學裸機編程其實就是學CPU編程思想,因為你后面肯定不只是用一種CPU,怎么控制引腳,怎么配置寄存器可能每款CPU都不一樣。要學到的是這種方法,這種原理。還是像上面所說的,先把cpu本身的資源搞懂!!IO、中斷(就單片機編程來說相當重要)、UART、內存尋址方式等等。如果可以,學一下它的匯編。如果匯編你也學了,好!!請基于這個cpu寫個時間片的調度器,不用太復雜,運行個多任務就可以了。(這里重點不是寫調度器,而是寫它的時候會涉及到各種棧操作,現場的保護與恢復,用到大量匯編)然后再根據外圍的器件做些實驗,這就不說了,你會接觸到一個東西:datasheet,如果英國話不好,它會讓你頭疼。
4、 然后像什么數模模數,語音,lcd屏,按鍵,時鐘芯片,等根據板子的資源放開整吧!!單片機這塊最后說一句:玩單片機千萬別不買開發板!!!!不玩單片機千萬別買開發板!!
嵌入式linux方法步驟:
1:命令
2:系統編程
3:驅動
4:vim
其他還有好多東西:服務器搭建,內核,shell…。想想自己怎樣熟悉windows的?在用win的時候有沒有天天去網上問,如何裝軟件,如何配ip,你肯定問過,有人會說我用win是圖形界面,linux也用圖形界面能學什么!!首先,圖形界面照樣能做很多事情,just like eclips.另外你要用linux可能不接觸到命令嗎?win下面沒有人會說在cmd下裝軟件,就像linux大部分是yum, aptget, make install一樣。久而久之你就熟了。不管什么系統,它都只是一個工具而已,用的時間越長越順手,越熟練。只不過這個工具并不那么簡單。學linux一定不要只看書,一定要多用,多用!多用!熟能生巧。
關于命令
當然是知道的越多越好,用的越熟越好,但別只為了練命令而練命令:搜linux常用命令,得到一堆結果,對著敲!枯燥!效率低!易忘!我的建議是從使用中學習,比如你要配samba,你就要安裝samba:yum ,aptget或make install,你會學到安裝命令及用法,關防火墻,你要學到sudo service iptables stop 如果你有心,你肯定不只想知道這句話是關防火墻,你還想知道每個單詞的意思及用法linux可以做很多東西,你從中可以學很多東西!主攻書籍:linux內核完全剖析、unix環境高級編程、深入理解linux內核、情景分析和源代。
關于系統編程
不建議直接整APUE,因為如果基礎不好很可能有些地方看不懂, linux系統編程其實就是函數調用,就是io 進程線程,ipc(進程通信),網絡編程,可能還會有UI。快速了解Linux編程是什么東西,快速知道如何寫一個簡單的程序,如文件拷貝程序(想想是不是很多時候你整了一大堆理論,卻還是寫不出程序來,是不是清楚知道函數的功能,卻不知道怎么調用,xxx從入門到精通系列正好解決這個問題,它儼然就是帶實例的中文man手冊,講解參數,講返回,然后給個例程…)。可以找一家大書店,去計算機分類中找到這方面的書,可以在書店里看,也可以買下來。快速的了解linux編程是何物。然后再看apue 這類書會很好上手。另外,經常試寫下系統命令:ls cd cp 等,經常看man。
關于驅動
驅動是個很深奧的東西,學驅動不要只限于驅動框架,一定要知道它每個功能的實現原理,比如你給驅動添加了poll功能,不要只知道這樣寫就可以實現poll,以后按這個寫就可以了,你還要知道它的原理!!就是到內核里看它是怎樣一步步調用過來的,中間經歷了什么?!
學驅動要多看內核原碼!了解內核子系統!不要說你看不懂,一開始誰也看不懂。必須有塊開發板(arm9及以上),有條件可參加培訓(進步快,能認識些朋友)。主攻書籍:毛德操的《嵌入式系統》及其他arm9手冊與arm匯編指令等
關于vim
還是那句話,操作的越眼花繚亂越好!請自行Google它的配置放法!這里提幾個常用插件:ctags, cscope, clang, wm, 還有很多!請自行Google!別用百度!! vim是個神器!功能上完全不輸source insight等任何IDE!
最后對于學習c,理由是c不只是一種語言,一種工具,它還是一種藝術,一種文化,一種哲學理念、但不是拿來炫耀得東西。對于linux內核,學習編程,讀一些優秀代碼也是有必要的。