學習ucos和ARM體系結構心得

在網上找到的文章,寫的挺好,適合入門級的菜鳥看看。

一步一步學習uCOS和ARM體系結構的心得

學習必備條件:
1、一塊開發板——現在淘寶上有很多開發板,建議初學者不要去購買那些ARM9體系結構的,因爲作爲初學者來說ARM9體系的東西是很複雜的,買塊ARM7的就可以了(先入門,然後再提高);
2、學習必備書籍
    《Pointer on C》中文名字叫《C和指針》(美)里科|譯者:徐波 前提你的瞭解C指針吧(這本書時非常經典的書籍,完全可以看中文版的,作者翻譯的非常到位)
   《嵌入式實時操作系統μCOS-II(第二版)》--邵貝貝翻譯的(不能不承認邵貝貝是一個非常好的翻譯者)
   《μC/OS-Ⅱ標準教程》--楊宗德
   對於英文不好的朋友可以購買《ARM體系結構與編程》--杜春蕾(該書其實還是有很多翻譯錯誤的,大家在看的時候要注意一下,但是不可否認的是這本書到目前爲止算得上是我見過最好的講解關於ARM體系結構的書籍了)
   對於英文過關的兄弟姐妹可以直接看《ARM+Architecture+Reference+Manual(2nd+Edition)》
3、有條件的兄弟姐妹可以選購一個仿真器 JLINK V8全功能版(這個的感謝中國的優秀工程師,是他們把原價1999多的JLINK變成了幾十元錢的東西
4、開發環境--MDK350或者IARARM
   如果要熟悉這些開發環境,就需要好好讀一些這些開發環境的手冊資料,不好意思,這個就只有英文的了。


以上4個條件具備下來,可能也不會超過500元錢。
下面來講講我的學習經歷:
    我剛開始學習的時候,自己走了不少彎路,這裏就省略不說了。
第一步:在開發板上跑跑簡單程序
因爲你有開發板,所以你就先在網上找一下對應開發板上的ARM芯片的datasheet,你都不先搞懂芯片的手冊,又談何讓自己實現很多功能呢。
熟讀數據手冊後,就儘可能的在開發板上實現芯片對應的每個功能,像GPIO實驗,UART通訊,I2C,ADC,DAC,PWM,RTC,SPI等等。自己寫自己的程序,然後在開發板上好好實踐一下。
當每個功能模塊都實現以後,建議你讓你的開發板實驗一下多個功能複合使用,比如用UART打印出ADC的值什麼的。
第二步:學習uCOS
鑑於你已經購買了《嵌入式實時操作系統μCOS-II(第二版)》,除開以下三個文件:
1、OS_CPU_C.c
2、OS_CPU.H,
3、OS_CPU_A.asm(這個是MDK環境下的彙編文件)或OS_CPU_A.a(這個是IAR開發環境下的彙編)
這三個文件的處理機制暫時可以不用先了解怎麼做的,怎麼移植的,以後再說
第一次讀這本書時,搞清楚什麼是任務,什麼是前後臺,爲什麼要在系統中加入嵌入式操作系統。
第二次讀這本書時,詳細瞭解他的TCB(Task Control Block)和ECB(Event Control Block)的數據結構,搞清楚整個uCOS的實現機制(這裏不要先就去看uCOS的移植,這樣只會讓你雲裏霧裏的)
第三次讀這本書是,詳細瞭解信號量,互斥信號量、消息隊列、郵箱和時間標誌組
鑑於你又購買了《μC/OS-Ⅱ標準教程》,你 可以想在VC++ 6.0開發環境下實現對信號量,互斥信號量、消息隊列、郵箱和事件標誌組的上機實驗代碼。
如果還是不能瞭解uCOS怎麼工作的,建議你多看幾遍(我可是足足看了6、7遍了,書都翻得脫頁了。汗說明我很笨,希望各位看官都比我聰明,呵呵)
第三步:建立對uCOS的初步認識
在網上下載對應你的開發板ARM芯片移植好了文件OS_CPU_C.c,OS_CPU.H,OS_CPU_A.asm(當然有的開發板已經提供了這樣的基礎實驗)
在你的開發板上跑跑uCOS,建立起自己對於uCOS在ARM7開發板上的認識。
在你所購買的ARM7開發板上編寫一個自己跑uCOS得任務(這裏先不要去搞中斷,初學者對於uCOS下的中斷程序設計根本就搞不清楚)
第四步:熟悉ARM體系結構
因爲是基於ARM7的移植,建議英文不好的去看看這本書《ARM體系結構與編程》(雖然這本書的作者在翻譯時有很多操作,但是還是建議初學者去購買來好好看看),對於英文好的直接在網上下載《ARM+Architecture+Reference+Manual(2nd+Edition)》看就可以了
在看這個《ARM體系結構與編程》或《ARM+Architecture+Reference+Manual(2nd+Edition)》時,務必注意多看幾次,瞭解以下幾個方面的知識:
1、ARM模式下的指令集
2、Thumd模式下的指令集
3、異常模式及進入異常時ARM如何處理
4、一定能熟悉ARM中的彙編指令
5、熟悉CPSR,R0-R7,R8-R14,R15及在各個模式下,這些寄存器的映射。
熟悉以後,再來自己做uCOS的移植了。
第五步:uCOS移植
當然在自己編寫代碼做移植uCOS之前,有必要看看別人的移植代碼。
其實對於uCOS的移植,我們只需要編寫關鍵的三個文件,文件如下:
1、OS_CPU_C.c(堆棧初始化操作OSTaskStkInit函數)
2、OS_CPU.H:完成在該芯片下的數據定義,比如什麼unsigned char 之類的,注意一下OS_STK和OS_CPU_SR的定義,定義下關中斷和開中斷的方式,有三個只能選擇1個,ARM芯片一般是定義爲第三種方式
3、OS_CPU_A.asm(這個是MDK環境下的彙編文件)或OS_CPU_A.a(這個是IAR開發環境下的彙編),這個文件的內容就多了,要做以下幾個函數的重寫:
1、OSStartHighRdy函數
2、任務級的任務切換函數OSCtxSw,
3、中斷級的任務切換OSIntCtxSw,其實只要寫好了OSCtxSw,OSIntCtxSw自然就copy一下就完了(copy的時候記者要把保存當前任務的寄存器去掉就可以了。
第六步:測試自己的uCOS移植代碼
第七步:在自己寫的uCOS移植代碼中跑跑任務。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章