arm嵌(qian)入式系統開發如何學(xue),一只老鳥的經驗之談
時間:2018-07-17 來(lai)源:未知(zhi)
嵌(qian)入(ru)(ru)(ru)式(shi)(shi)系(xi)統(tong)(tong)在我們身邊我們隨處可見,我們用的手(shou)機啊,mp3等消(xiao)費(fei)品,還有一些飛(fei)機,地鐵等航空航天設備(bei),你無(wu)時不刻的都在接觸著嵌(qian)入(ru)(ru)(ru)式(shi)(shi)系(xi)統(tong)(tong)設備(bei),可見嵌(qian)入(ru)(ru)(ru)式(shi)(shi)系(xi)統(tong)(tong)發(fa)展(zhan)是如此的好,伴隨著發(fa)展(zhan)的優(you)勢(shi),許多人(ren)開(kai)始著手(shou)學(xue)(xue)習(xi)(xi)嵌(qian)入(ru)(ru)(ru)式(shi)(shi),那么在嵌(qian)入(ru)(ru)(ru)式(shi)(shi)系(xi)統(tong)(tong)學(xue)(xue)習(xi)(xi)中,會接觸到(dao)ARM嵌(qian)入(ru)(ru)(ru)式(shi)(shi)系(xi)統(tong)(tong)開(kai)發(fa),在這(zhe)里(li),我這(zhe)只(zhi)老鳥(niao)就來(lai)談(tan)談(tan)對于ARM嵌(qian)入(ru)(ru)(ru)式(shi)(shi)系(xi)統(tong)(tong)開(kai)發(fa)學(xue)(xue)習(xi)(xi)方法,都是在學(xue)(xue)習(xi)(xi)工作(zuo)中總結的。
首先學(xue)習arm嵌入(ru)式(shi)系統(tong)開發,那就要(yao)先要(yao)做一個最小(xiao)系統(tong)板
在(zai)這里做最(zui)小系統板,你(ni)(ni)要(yao)是(shi)剛(gang)開(kai)始學,就要(yao)從基礎的(de)(de)開(kai)始,建議先布一個僅有Flash,SRAM或SDRAM、CPU、JTAG、和復位信號的(de)(de)小系統板,留出擴展接口。使(shi)最(zui)小系統能(neng)夠正常運行,你(ni)(ni)的(de)(de)任務就完成了一半,好在(zai)ARM的(de)(de)外(wai)圍接口基本都是(shi)標準接口,如果你(ni)(ni)已(yi)有這些硬(ying)件(jian)的(de)(de)布線經驗,這對你(ni)(ni)來講(jiang)是(shi)一件(jian)很容易的(de)(de)事情。

接下(xia)來就是(shi)程(cheng)序(xu)代(dai)碼了,你需要(yao)寫一個(ge)啟(qi)動(dong)代(dai)碼,根據硬件地址先寫一個(ge)能夠啟(qi)動(dong)的小代(dai)碼,包括(kuo)以下(xia)部分:
初始化端口,屏(ping)蔽(bi)中斷(duan),把程序拷貝到SRAM中;完成(cheng)代碼的(de)重映射;配置(zhi)中斷(duan)句柄,連接到C語言入(ru)口。也許你(ni)(ni)看(kan)到給你(ni)(ni)的(de)一(yi)些示(shi)例程序當中,bootloader會有很多東西,但是(shi)不(bu)要(yao)被(bei)這些復雜的(de)程序所困擾,因為你(ni)(ni)不(bu)是(shi)做開發板的(de),你(ni)(ni)的(de)任務就是(shi)做段小程序,讓(rang)你(ni)(ni)的(de)應用程序能夠運行下(xia)去
多看一些操作系(xi)統程(cheng)序(xu),在ARM嵌入式開發的(de)應用開放源代碼的(de)程(cheng)序(xu)很多,要(yao)想提(ti)高自己,就要(yao)多看別人的(de)程(cheng)序(xu),linux,uc/os-II等等這些都是很好的(de)原碼。
對你所(suo)用的芯(xin)片要(yao)研究透徹,盡管(guan)ARM在內核上兼(jian)容,但(dan)每家(jia)芯(xin)片都有自己的特色,編寫程序(xu)時(shi)必須考(kao)慮這些問題。尤其是(shi)女孩(hai)子,在這兒千萬別(bie)有依賴心(xin)理,總想拿(na)別(bie)人(ren)的示例(li)程序(xu)修改(gai),卻越改(gai)越亂。
在這里要(yao)注意(yi)如(ru)果(guo)你(ni)是作(zuo)硬件,每個廠家基本上都有針對該芯片的(de)DEMO板(ban)原理(li)圖。先將(jiang)原理(li)圖消化(hua)。這樣(yang)你(ni)以(yi)后做設計時,對資源的(de)分配(pei)心(xin)中有數。器件的(de)DATSHEET一定要(yao)好好消化(hua)。
你如(ru)果(guo)是(shi)要做軟件最好(hao)對(dui)操(cao)作系(xi)統的(de)機理要有(you)所了解。當然(ran)這對(dui)軟件工(gong)程師來說(shuo)是(shi)小菜(cai)一碟。但如(ru)果(guo)是(shi)硬件出(chu)身的(de)想做ARM嵌入式開發的(de)人(ren)就有(you)點費勁。
在這(zhe)里你(ni)需要知(zhi)道一個問(wen)題:有很多人再問(wen)做(zuo)最小系統板(ban)是(shi)2層(ceng)還(huan)是(shi)4層(ceng)好(hao)(hao)呢(ni)?在這(zhe)里告訴你(ni):只有AT91可以(yi)用(yong)兩層(ceng)板(ban),其他的最少4層(ceng);44b0的地(di)和電源處理(li)好(hao)(hao)也可用(yong)兩層(ceng)板(ban);
選用(yong)四層板(ban)不僅(jin)是(shi)(shi)電(dian)(dian)源(yuan)和地的(de)(de)問題,高(gao)速(su)數(shu)字(zi)電(dian)(dian)路對走線(xian)的(de)(de)阻(zu)抗有要求(qiu),二(er)層板(ban)不好(hao)控(kong)制阻(zu)抗。33歐電(dian)(dian)阻(zu)一般加在驅(qu)動器端,也(ye)是(shi)(shi)起阻(zu)抗匹配作用(yong)的(de)(de);布(bu)線(xian)時(shi)要先(xian)布(bu)數(shu)據地址線(xian),和需要保證(zheng)的(de)(de)高(gao)速(su)線(xian);
在高頻的(de)時候(hou),PCB板上的(de)走線(xian)都要看成(cheng)傳輸(shu)線(xian)。傳輸(shu)線(xian)有其特征阻抗,學過傳輸(shu)線(xian)理(li)論的(de)都知道(dao),當傳輸(shu)線(xian)上某處出現阻抗突變(不匹配)時,信(xin)號通(tong)過就會(hui)發生反(fan)(fan)射(she),反(fan)(fan)射(she)對原信(xin)號造成(cheng)干擾,嚴重(zhong)時就會(hui)影響(xiang)電路的(de)正常(chang)工(gong)作(zuo)。采用四(si)層板時,通(tong)常(chang)外層走信(xin)號線(xian),中間(jian)兩層分別為(wei)電源和地平(ping)面(mian),這樣(yang)一方面(mian)隔離了兩個信(xin)號層,更重(zhong)要的(de)是外層的(de)走線(xian)與它們所靠近的(de)平(ping)面(mian)形成(cheng)稱為(wei)“微帶(dai)”(microstrip) 的(de)傳輸(shu)線(xian),它的(de)阻抗比較固定,而(er)且可以計算。對于兩層板就比較難以做到這樣(yang)。這種(zhong)傳輸(shu)線(xian)阻抗主(zhu)要于走線(xian)的(de)寬度、到參考平(ping)面(mian)的(de)距離、敷銅的(de)厚度以及(ji)介電材料的(de)特性有關,有許(xu)多(duo)現成(cheng)的(de)公(gong)式和程序可供計算。
還有一(yi)點就是arm嵌(qian)入式(shi)系(xi)統開(kai)發的“裸(luo)機”編程(cheng)
(1)首先(xian)打(da)好C語言(yan)基(ji)(ji)礎,推薦(jian)看《C程序設計語言(yan)》,因為所有的(de)“裸機(ji)”編(bian)(bian)程都是基(ji)(ji)于C語言(yan)開(kai)發的(de),并且(qie)后邊我們(men)接觸到(dao)的(de)嵌入式(shi)linux分時系(xi)統也是完全用(yong)C語言(yan)實(shi)現(xian)的(de),學好C語言(yan)不僅(jin)利于當(dang)前的(de)單片機(ji)編(bian)(bian)程,也為后來學習嵌入式(shi)linux打(da)下基(ji)(ji)礎;
(2)一(yi)(yi)般(ban)的(de)(de),單(dan)片(pian)(pian)機編程默認的(de)(de)是從(cong)51開(kai)始學(xue)起(qi),我這里(li)推(tui)(tui)薦(jian)直接從(cong)STM學(xue)起(qi),利用ST封裝的(de)(de)庫(ku)函數編程,你會開(kai)始慢慢理解(jie)封裝和分層的(de)(de)概念(nian)了(le)。這里(li)推(tui)(tui)薦(jian)選(xuan)擇(ze)意法半導(dao)體家(jia)的(de)(de)STM8系列(lie)單(dan)片(pian)(pian)機,該系列(lie)單(dan)片(pian)(pian)機功耗低,性價比高,片(pian)(pian)上資源豐富。前(qian)期(qi)學(xue)習時,根據芯(xin)片(pian)(pian)手冊,對片(pian)(pian)上的(de)(de)外設進行(xing)編程練習,了(le)解(jie)每(mei)一(yi)(yi)種(zhong)外設的(de)(de)工(gong)作(zuo)原理;在此之(zhi)后,開(kai)始了(le)解(jie)芯(xin)片(pian)(pian)的(de)(de)工(gong)作(zuo)模(mo)式(shi),即一(yi)(yi)般(ban)的(de)(de)用戶模(mo)式(shi),中(zhong)斷模(mo)式(shi),管理模(mo)式(shi)等。
(3)熟悉編(bian)譯器的(de)使用,針對arm內核的(de)處理器,一般的(de)選擇arm公司支持的(de)keilMDK編(bian)譯器,重點學習該軟件(jian)的(de)仿真功能。
(4)學(xue)習基(ji)礎(chu)的(de)arm匯編語(yu)言,閱讀(du)Start.S啟動文件(jian),明白單(dan)片(pian)機的(de)工作原理(li),以及代碼是如(ru)何(he)在(zai)單(dan)片(pian)機硬件(jian)內部(bu)執行的(de)。
這(zhe)(zhe)些(xie)都是(shi)arm嵌入式系(xi)統(tong)開發需(xu)要注(zhu)意的(de)(de)和學(xue)習(xi)(xi)的(de)(de)步驟(zou),我總(zong)結(jie)的(de)(de)這(zhe)(zhe)些(xie)都是(shi)學(xue)習(xi)(xi)工作中需(xu)要的(de)(de),也(ye)是(shi)我在學(xue)習(xi)(xi)中的(de)(de)一(yi)些(xie)方法,對你學(xue)習(xi)(xi)arm嵌入式系(xi)統(tong)開發還(huan)是(shi)百利(li)而(er)無一(yi)害的(de)(de),掌(zhang)握這(zhe)(zhe)些(xie)方法步驟(zou),那(nei)你對arm嵌入式系(xi)統(tong)開發已經是(shi)入門(men)階段了(le),在這(zhe)(zhe)里(li)還(huan)需(xu)要注(zhu)意一(yi)點就是(shi)要理論和實踐(jian)要相結(jie)合(he),這(zhe)(zhe)樣(yang)才更(geng)有效(xiao)果。

