ARM學習方法

一步一步學習uCOS和ARM體系結構的心得
學習必備條件:
1、一塊開發板——例如44B0開發板,建議初學者不要去購買那些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移植代碼中跑跑任務。

 

 

 

[分享]ARM初學者學習ARM的步驟
很多人學完單片機就想學arm,但不知如何去學~現在列出一下學習這方面的步驟-----基於linux系統的學習步驟如下:(一步步來哦:)
其實這也只是個基礎,以後實際做項目了還要去學很多

1、Linux 基礎

安裝Linux操作系統 
Linux文件系統 
Linux常用命令 
Linux啓動過程詳解 
熟悉Linux服務 能夠獨立安裝Linux操作系統 
能夠熟練使用Linux系統的基本命令 
認識Linux系統的常用服務 安裝Linux操作系統 
Linux基本命令實踐 
設置Linux環境變量 
定製Linux的服務 Shell 編程基礎使用vi編輯文件 
使用Emacs編輯文件
使用其他編輯器
2、Shell 編程基礎
Shell簡介 
認識後臺程序
Bash編程熟悉Linux系統下的編輯環境 
熟悉Linux下的各種Shell 
熟練進行shell編程熟悉vi基本操作 
熟悉Emacs的基本操作 
比較不同shell的區別 
編寫一個測試服務器是否連通的shell腳本程序 
編寫一個查看進程是否存在的shell腳本程序 
編寫一個帶有循環語句的shell腳本程序
3、Linux 下的 C 編程基礎
linux C語言環境概述 
Gcc使用方法 
Gdb調試技術 
Autoconf 
Automake 
Makefile 
代碼優化 熟悉Linux系統下的開發環境 
熟悉Gcc編譯器 
熟悉Makefile規則編寫Hello,World程序 
使用 make命令編譯程序 
編寫帶有一個循環的程序 
調試一個有問題的程序
4、嵌入式系統開發基礎
嵌入式系統概述 
交叉編譯 
配置TFTP服務 
配置NFS服務 
下載Bootloader和內核 
嵌入式Linux應用軟件開發流程
熟悉嵌入式系統概念以及開發流程 
建立嵌入式系統開發環境製作cross_gcc工具鏈 
編譯並下載U-boot 
編譯並下載Linux內核 
編譯並下載Linux應用程序
4、嵌入式系統移植
Linux內核代碼 
平臺相關代碼分析 
ARM平臺介紹 
平臺移植的關鍵技術 
移植Linux內核到 ARM平臺 瞭解移植的概念 
能夠移植Linux內核移植Linux2.6內核到 ARM9開發板
5、嵌入式 Linux 下串口通信
串行I/O的基本概念 
嵌入式Linux應用軟件開發流程 
Linux系統的文件和設備 
與文件相關的系統調用 
配置超級終端和MiniCOM 能夠熟悉進行串口通信 
熟悉文件I/O 編寫串口通信程序 
編寫多串口通信程序
6、嵌入式系統中多進程程序設計
Linux系統進程概述 
嵌入式系統的進程特點 
進程操作 
守護進程 
相關的系統調用瞭解Linux系統中進程的概念 
能夠編寫多進程程序編寫多進程程序 
編寫一個守護進程程序 
sleep系統調用任務管理、同步與通信 Linux任務概述
任務調度 
管道 
信號 
共享內存 
任務管理 API 瞭解Linux系統任務管理機制 
熟悉進程間通信的幾種方式 
熟悉嵌入式Linux中的任務間同步與通信
編寫一個簡單的管道程序實現文件傳輸 
編寫一個使用共享內存的程序
7、嵌入式系統中多線程程序設計
線程的基礎知識 
多線程編程方法 
線程應用中的同步問題了解線程的概念 
能夠編寫簡單的多線程程序編寫一個多線程程序
8、嵌入式 Linux 網絡編程
網絡基礎知識 
嵌入式Linux中TCP/IP網絡結構 
socket 編程 
常用 API函數 
分析Ping命令的實現 
基本UDP套接口編程 
許可證管理 
PPP協議 
GPRS 瞭解嵌入式Linux網絡體系結構 
能夠進行嵌入式Linux環境下的socket 編程 
熟悉UDP協議、PPP協議 
熟悉GPRS 使用socket 編寫代理服務器 
使用socket 編寫路由器 
編寫許可證服務器 
指出TCP和UDP的優缺點 
編寫一個web服務器 
編寫一個運行在 ARM平臺的網絡播放器
9、GUI 程序開發
GUI基礎 
嵌入式系統GUI類型 
編譯QT 
進行QT開發熟悉嵌入式系統常用的GUI 
能夠進行QT編程使用QT編寫“Hello,World”程序 
調試一個加入信號/槽的實例 
通過重載QWidget 類方法處理事件
10、Linux 字符設備驅動程序
設備驅動程序基礎知識 
Linux系統的模塊 
字符設備驅動分析 
fs_operation結構 
加載驅動程序瞭解設備驅動程序的概念 
瞭解Linux字符設備驅動程序結構 
能夠編寫字符設備驅動程序編寫Skull驅動 
編寫鍵盤驅動 
編寫I/O驅動 
分析一個看門狗驅動程序 
對比Linux2.6內核與2.4內核中字符設備驅動的不同
Linux 塊設備驅動程序塊設備驅動程序工作原理 
典型的塊設備驅動程序分析 
塊設備的讀寫請求隊列了解Linux塊設備驅動程序結構 
能夠編寫簡單的塊設備驅動程序比較字符設備與塊設備的異同 
編寫MMC卡驅動程序 
分析一個文件系統 
對比Linux2.6內核與2.4內核中塊設備驅動的不同
11、文件系統
虛擬文件系統 
文件系統的建立 
ramfs內存文件系統 
proc文件系統 
devfs 文件系統 
MTD技術簡介 
MTD塊設備初始化 
MTD塊設備的讀寫操作了解Linux系統的文件系統 
瞭解嵌入式Linux的文件系統 
瞭解MTD技術 
能夠編寫簡單的文件系統爲 ARM9開發板添加 MTD支持 
移植JFFS2文件系統 
通過proc文件系統修改操作系統參數 
分析romfs 文件系統源代碼 
創建一個cramfs 文件系統

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章