ARM学习步骤
ARM學(xué)習(xí)步驟
學(xué)習(xí)必備條件:
1、一塊開(kāi)發(fā)板——例如44B0開(kāi)發(fā)板,建議初學(xué)者不要去購(gòu)買(mǎi)那些ARM9體系結(jié)構(gòu)的,因?yàn)樽鳛槌鯇W(xué)者來(lái)說(shuō)ARM9體系的東西是很復(fù)雜的,買(mǎi)塊ARM7的就可以了(先入門(mén),然后再提高);
2、學(xué)習(xí)必備書(shū)籍
? ? 《Pointer on C》中文名字叫《C和指針》(美)里科|譯者:徐波 前提你的了解C指針吧(這本書(shū)時(shí)非常經(jīng)典的書(shū)籍,完全可以看中文版的,作者翻譯的非常到位)
? ?《嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-II(第二版)》--邵貝貝翻譯的(不能不承認(rèn)邵貝貝是一個(gè)非常好的翻譯者)59.20元
? ?《μC/OS-Ⅱ標(biāo)準(zhǔn)教程》--楊宗德
? ?對(duì)于英文不好的朋友可以購(gòu)買(mǎi)《ARM體系結(jié)構(gòu)與編程 31.50元》--杜春蕾(該書(shū)其實(shí)還是有很多翻譯錯(cuò)誤的,大家在看的時(shí)候要注意一下,但是不可否認(rèn)的是這本書(shū)到目前為止算得上是我見(jiàn)過(guò)最好的講解關(guān)于ARM體系結(jié)構(gòu)的書(shū)籍了)
? ?對(duì)于英文過(guò)關(guān)的兄弟姐妹可以直接看《ARM+Architecture+Reference+Manual(2nd+Edition)》
3、有條件的兄弟姐妹可以選購(gòu)一個(gè)仿真器 JLINK V8全功能版(這個(gè)的感謝中國(guó)的優(yōu)秀工程師,是他們把原價(jià)1999多的JLINK變成了幾十元錢(qián)的東西
4、開(kāi)發(fā)環(huán)境--MDK350或者IARARM
? ?如果要熟悉這些開(kāi)發(fā)環(huán)境,就需要好好讀一些這些開(kāi)發(fā)環(huán)境的手冊(cè)資料,不好意思,這個(gè)就只有英文的了。
以上4個(gè)條件具備下來(lái),可能也不會(huì)超過(guò)500元錢(qián)。
下面來(lái)講講我的學(xué)習(xí)經(jīng)歷:
? ? 我剛開(kāi)始學(xué)習(xí)的時(shí)候,自己走了不少?gòu)澛?#xff0c;這里就省略不說(shuō)了。
第一步:在開(kāi)發(fā)板上跑跑簡(jiǎn)單程序
因?yàn)槟阌虚_(kāi)發(fā)板,所以你就先在網(wǎng)上找一下對(duì)應(yīng)開(kāi)發(fā)板上的ARM芯片的datasheet,你都不先搞懂芯片的手冊(cè),又談何讓自己實(shí)現(xiàn)很多功能呢。
熟讀數(shù)據(jù)手冊(cè)后,就盡可能的在開(kāi)發(fā)板上實(shí)現(xiàn)芯片對(duì)應(yīng)的每個(gè)功能,像GPIO實(shí)驗(yàn),UART通訊,I2C,ADC,DAC,PWM,RTC,SPI等等。自己寫(xiě)自己的程序,然后在開(kāi)發(fā)板上好好實(shí)踐一下。
當(dāng)每個(gè)功能模塊都實(shí)現(xiàn)以后,建議你讓你的開(kāi)發(fā)板實(shí)驗(yàn)一下多個(gè)功能復(fù)合使用,比如用UART打印出ADC的值什么的。
第二步:學(xué)習(xí)uCOS
鑒于你已經(jīng)購(gòu)買(mǎi)了《嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-II(第二版)》,除開(kāi)以下三個(gè)文件:
1、OS_CPU_C.c
2、OS_CPU.H,
3、OS_CPU_A.asm(這個(gè)是MDK環(huán)境下的匯編文件)或OS_CPU_A.a(這個(gè)是IAR開(kāi)發(fā)環(huán)境下的匯編)
這三個(gè)文件的處理機(jī)制暫時(shí)可以不用先了解怎么做的,怎么移植的,以后再說(shuō)
第一次讀這本書(shū)時(shí),搞清楚什么是任務(wù),什么是前后臺(tái),為什么要在系統(tǒng)中加入嵌入式操作系統(tǒng)。
第二次讀這本書(shū)時(shí),詳細(xì)了解他的TCB(Task Control Block)和ECB(Event Control Block)的數(shù)據(jù)結(jié)構(gòu),搞清楚整個(gè)uCOS的實(shí)現(xiàn)機(jī)制(這里不要先就去看uCOS的移植,這樣只會(huì)讓你云里霧里的)
第三次讀這本書(shū)是,詳細(xì)了解信號(hào)量,互斥信號(hào)量、消息隊(duì)列、郵箱和時(shí)間標(biāo)志組
鑒于你又購(gòu)買(mǎi)了《μC/OS-Ⅱ標(biāo)準(zhǔn)教程》,你 可以想在VC++ 6.0開(kāi)發(fā)環(huán)境下實(shí)現(xiàn)對(duì)信號(hào)量,互斥信號(hào)量、消息隊(duì)列、郵箱和事件標(biāo)志組的上機(jī)實(shí)驗(yàn)代碼。
如果還是不能了解uCOS怎么工作的,建議你多看幾遍(我可是足足看了6、7遍了,書(shū)都翻得脫頁(yè)了。汗說(shuō)明我很笨,希望各位看官都比我聰明,呵呵)
第三步:建立對(duì)uCOS的初步認(rèn)識(shí)
在網(wǎng)上下載對(duì)應(yīng)你的開(kāi)發(fā)板ARM芯片移植好了文件OS_CPU_C.c,OS_CPU.H,OS_CPU_A.asm(當(dāng)然有的開(kāi)發(fā)板已經(jīng)提供了這樣的基礎(chǔ)實(shí)驗(yàn))
在你的開(kāi)發(fā)板上跑跑uCOS,建立起自己對(duì)于uCOS在ARM7開(kāi)發(fā)板上的認(rèn)識(shí)。
在你所購(gòu)買(mǎi)的ARM7開(kāi)發(fā)板上編寫(xiě)一個(gè)自己跑uCOS得任務(wù)(這里先不要去搞中斷,初學(xué)者對(duì)于uCOS下的中斷程序設(shè)計(jì)根本就搞不清楚)
第四步:熟悉ARM體系結(jié)構(gòu)
因?yàn)槭腔贏RM7的移植,建議英文不好的去看看這本書(shū)《ARM體系結(jié)構(gòu)與編程》(雖然這本書(shū)的作者在翻譯時(shí)有很多操作,但是還是建議初學(xué)者去購(gòu)買(mǎi)來(lái)好好看看),對(duì)于英文好的直接在網(wǎng)上下載《ARM+Architecture+Reference+Manual(2nd+Edition)》看就可以了
在看這個(gè)《ARM體系結(jié)構(gòu)與編程》或《ARM+Architecture+Reference+Manual(2nd+Edition)》時(shí),務(wù)必注意多看幾次,了解以下幾個(gè)方面的知識(shí):
1、ARM模式下的指令集
2、Thumd模式下的指令集
3、異常模式及進(jìn)入異常時(shí)ARM如何處理
4、一定能熟悉ARM中的匯編指令
5、熟悉CPSR,R0-R7,R8-R14,R15及在各個(gè)模式下,這些寄存器的映射。
熟悉以后,再來(lái)自己做uCOS的移植了。
第五步:uCOS移植
當(dāng)然在自己編寫(xiě)代碼做移植uCOS之前,有必要看看別人的移植代碼。
其實(shí)對(duì)于uCOS的移植,我們只需要編寫(xiě)關(guān)鍵的三個(gè)文件,文件如下:
1、OS_CPU_C.c(堆棧初始化操作OSTaskStkInit函數(shù))
2、OS_CPU.H:完成在該芯片下的數(shù)據(jù)定義,比如什么unsigned char 之類(lèi)的,注意一下OS_STK和OS_CPU_SR的定義,定義下關(guān)中斷和開(kāi)中斷的方式,有三個(gè)只能選擇1個(gè),ARM芯片一般是定義為第三種方式
3、OS_CPU_A.asm(這個(gè)是MDK環(huán)境下的匯編文件)或OS_CPU_A.a(這個(gè)是IAR開(kāi)發(fā)環(huán)境下的匯編),這個(gè)文件的內(nèi)容就多了,要做以下幾個(gè)函數(shù)的重寫(xiě):
1、OSStartHighRdy函數(shù)
2、任務(wù)級(jí)的任務(wù)切換函數(shù)OSCtxSw,
3、中斷級(jí)的任務(wù)切換OSIntCtxSw,其實(shí)只要寫(xiě)好了OSCtxSw,OSIntCtxSw自然就copy一下就完了(copy的時(shí)候記者要把保存當(dāng)前任務(wù)的寄存器去掉就可以了。
第六步:測(cè)試自己的uCOS移植代碼
第七步:在自己寫(xiě)的uCOS移植代碼中跑跑任務(wù)。
學(xué)習(xí)必備條件:
1、一塊開(kāi)發(fā)板——例如44B0開(kāi)發(fā)板,建議初學(xué)者不要去購(gòu)買(mǎi)那些ARM9體系結(jié)構(gòu)的,因?yàn)樽鳛槌鯇W(xué)者來(lái)說(shuō)ARM9體系的東西是很復(fù)雜的,買(mǎi)塊ARM7的就可以了(先入門(mén),然后再提高);
2、學(xué)習(xí)必備書(shū)籍
? ? 《Pointer on C》中文名字叫《C和指針》(美)里科|譯者:徐波 前提你的了解C指針吧(這本書(shū)時(shí)非常經(jīng)典的書(shū)籍,完全可以看中文版的,作者翻譯的非常到位)
? ?《嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-II(第二版)》--邵貝貝翻譯的(不能不承認(rèn)邵貝貝是一個(gè)非常好的翻譯者)59.20元
? ?《μC/OS-Ⅱ標(biāo)準(zhǔn)教程》--楊宗德
? ?對(duì)于英文不好的朋友可以購(gòu)買(mǎi)《ARM體系結(jié)構(gòu)與編程 31.50元》--杜春蕾(該書(shū)其實(shí)還是有很多翻譯錯(cuò)誤的,大家在看的時(shí)候要注意一下,但是不可否認(rèn)的是這本書(shū)到目前為止算得上是我見(jiàn)過(guò)最好的講解關(guān)于ARM體系結(jié)構(gòu)的書(shū)籍了)
? ?對(duì)于英文過(guò)關(guān)的兄弟姐妹可以直接看《ARM+Architecture+Reference+Manual(2nd+Edition)》
3、有條件的兄弟姐妹可以選購(gòu)一個(gè)仿真器 JLINK V8全功能版(這個(gè)的感謝中國(guó)的優(yōu)秀工程師,是他們把原價(jià)1999多的JLINK變成了幾十元錢(qián)的東西
4、開(kāi)發(fā)環(huán)境--MDK350或者IARARM
? ?如果要熟悉這些開(kāi)發(fā)環(huán)境,就需要好好讀一些這些開(kāi)發(fā)環(huán)境的手冊(cè)資料,不好意思,這個(gè)就只有英文的了。
以上4個(gè)條件具備下來(lái),可能也不會(huì)超過(guò)500元錢(qián)。
下面來(lái)講講我的學(xué)習(xí)經(jīng)歷:
? ? 我剛開(kāi)始學(xué)習(xí)的時(shí)候,自己走了不少?gòu)澛?#xff0c;這里就省略不說(shuō)了。
第一步:在開(kāi)發(fā)板上跑跑簡(jiǎn)單程序
因?yàn)槟阌虚_(kāi)發(fā)板,所以你就先在網(wǎng)上找一下對(duì)應(yīng)開(kāi)發(fā)板上的ARM芯片的datasheet,你都不先搞懂芯片的手冊(cè),又談何讓自己實(shí)現(xiàn)很多功能呢。
熟讀數(shù)據(jù)手冊(cè)后,就盡可能的在開(kāi)發(fā)板上實(shí)現(xiàn)芯片對(duì)應(yīng)的每個(gè)功能,像GPIO實(shí)驗(yàn),UART通訊,I2C,ADC,DAC,PWM,RTC,SPI等等。自己寫(xiě)自己的程序,然后在開(kāi)發(fā)板上好好實(shí)踐一下。
當(dāng)每個(gè)功能模塊都實(shí)現(xiàn)以后,建議你讓你的開(kāi)發(fā)板實(shí)驗(yàn)一下多個(gè)功能復(fù)合使用,比如用UART打印出ADC的值什么的。
第二步:學(xué)習(xí)uCOS
鑒于你已經(jīng)購(gòu)買(mǎi)了《嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-II(第二版)》,除開(kāi)以下三個(gè)文件:
1、OS_CPU_C.c
2、OS_CPU.H,
3、OS_CPU_A.asm(這個(gè)是MDK環(huán)境下的匯編文件)或OS_CPU_A.a(這個(gè)是IAR開(kāi)發(fā)環(huán)境下的匯編)
這三個(gè)文件的處理機(jī)制暫時(shí)可以不用先了解怎么做的,怎么移植的,以后再說(shuō)
第一次讀這本書(shū)時(shí),搞清楚什么是任務(wù),什么是前后臺(tái),為什么要在系統(tǒng)中加入嵌入式操作系統(tǒng)。
第二次讀這本書(shū)時(shí),詳細(xì)了解他的TCB(Task Control Block)和ECB(Event Control Block)的數(shù)據(jù)結(jié)構(gòu),搞清楚整個(gè)uCOS的實(shí)現(xiàn)機(jī)制(這里不要先就去看uCOS的移植,這樣只會(huì)讓你云里霧里的)
第三次讀這本書(shū)是,詳細(xì)了解信號(hào)量,互斥信號(hào)量、消息隊(duì)列、郵箱和時(shí)間標(biāo)志組
鑒于你又購(gòu)買(mǎi)了《μC/OS-Ⅱ標(biāo)準(zhǔn)教程》,你 可以想在VC++ 6.0開(kāi)發(fā)環(huán)境下實(shí)現(xiàn)對(duì)信號(hào)量,互斥信號(hào)量、消息隊(duì)列、郵箱和事件標(biāo)志組的上機(jī)實(shí)驗(yàn)代碼。
如果還是不能了解uCOS怎么工作的,建議你多看幾遍(我可是足足看了6、7遍了,書(shū)都翻得脫頁(yè)了。汗說(shuō)明我很笨,希望各位看官都比我聰明,呵呵)
第三步:建立對(duì)uCOS的初步認(rèn)識(shí)
在網(wǎng)上下載對(duì)應(yīng)你的開(kāi)發(fā)板ARM芯片移植好了文件OS_CPU_C.c,OS_CPU.H,OS_CPU_A.asm(當(dāng)然有的開(kāi)發(fā)板已經(jīng)提供了這樣的基礎(chǔ)實(shí)驗(yàn))
在你的開(kāi)發(fā)板上跑跑uCOS,建立起自己對(duì)于uCOS在ARM7開(kāi)發(fā)板上的認(rèn)識(shí)。
在你所購(gòu)買(mǎi)的ARM7開(kāi)發(fā)板上編寫(xiě)一個(gè)自己跑uCOS得任務(wù)(這里先不要去搞中斷,初學(xué)者對(duì)于uCOS下的中斷程序設(shè)計(jì)根本就搞不清楚)
第四步:熟悉ARM體系結(jié)構(gòu)
因?yàn)槭腔贏RM7的移植,建議英文不好的去看看這本書(shū)《ARM體系結(jié)構(gòu)與編程》(雖然這本書(shū)的作者在翻譯時(shí)有很多操作,但是還是建議初學(xué)者去購(gòu)買(mǎi)來(lái)好好看看),對(duì)于英文好的直接在網(wǎng)上下載《ARM+Architecture+Reference+Manual(2nd+Edition)》看就可以了
在看這個(gè)《ARM體系結(jié)構(gòu)與編程》或《ARM+Architecture+Reference+Manual(2nd+Edition)》時(shí),務(wù)必注意多看幾次,了解以下幾個(gè)方面的知識(shí):
1、ARM模式下的指令集
2、Thumd模式下的指令集
3、異常模式及進(jìn)入異常時(shí)ARM如何處理
4、一定能熟悉ARM中的匯編指令
5、熟悉CPSR,R0-R7,R8-R14,R15及在各個(gè)模式下,這些寄存器的映射。
熟悉以后,再來(lái)自己做uCOS的移植了。
第五步:uCOS移植
當(dāng)然在自己編寫(xiě)代碼做移植uCOS之前,有必要看看別人的移植代碼。
其實(shí)對(duì)于uCOS的移植,我們只需要編寫(xiě)關(guān)鍵的三個(gè)文件,文件如下:
1、OS_CPU_C.c(堆棧初始化操作OSTaskStkInit函數(shù))
2、OS_CPU.H:完成在該芯片下的數(shù)據(jù)定義,比如什么unsigned char 之類(lèi)的,注意一下OS_STK和OS_CPU_SR的定義,定義下關(guān)中斷和開(kāi)中斷的方式,有三個(gè)只能選擇1個(gè),ARM芯片一般是定義為第三種方式
3、OS_CPU_A.asm(這個(gè)是MDK環(huán)境下的匯編文件)或OS_CPU_A.a(這個(gè)是IAR開(kāi)發(fā)環(huán)境下的匯編),這個(gè)文件的內(nèi)容就多了,要做以下幾個(gè)函數(shù)的重寫(xiě):
1、OSStartHighRdy函數(shù)
2、任務(wù)級(jí)的任務(wù)切換函數(shù)OSCtxSw,
3、中斷級(jí)的任務(wù)切換OSIntCtxSw,其實(shí)只要寫(xiě)好了OSCtxSw,OSIntCtxSw自然就copy一下就完了(copy的時(shí)候記者要把保存當(dāng)前任務(wù)的寄存器去掉就可以了。
第六步:測(cè)試自己的uCOS移植代碼
第七步:在自己寫(xiě)的uCOS移植代碼中跑跑任務(wù)。
總結(jié)
- 上一篇: 3.4实训任务 Hadoop环境搭建与安
- 下一篇: GIS实验之房价数据可视化分析