從51到《ARM—32位嵌入式系統入門》從51系列單片機的一般知識出發,將ARM處理器和51系列單片機進行對比,引導讀者去理解和學習ARM處理器的知識。內容分為3部分:第1部分是前4章,從大家所熟悉的51系列單片機的基礎知識開始,介紹ARM處理器的基本知識,包括ARM和51系列的對比、中斷處理系統、寄存器和存儲器結構等;第2部分是5~9章,詳細比較ARM指令和51系列指令之間的差異,進一步闡述ARM指令的含義和使用方法,從簡單的51系列編程經驗出發,介紹ARM處理器軟件編程方法;第3部分是后3章,介紹ARM處理器開發工具的使用。 任何一個學習過51系列單片機的技術人員,借助《從51到ARM—32位嵌入式系統入門》都會很容易地學會ARM處理器的一般知識,了解軟件設計的基本方法,并且能夠使用開發工具進行程序編輯、編譯、連接和調試,成為一個初步懂得ARM并可以進行軟件設計的工程師。 《從51到ARM—32位嵌入式系統入門》可供電子信息類大學生、研究生或電子設計工程師閱讀參考。 從51到ARM-32位嵌入式系統入門目錄 第1章 幾個基本概念 1.1 從51系列單片機到ARM處理器1 1.2 ARM不是單片機2 1.3 51系列單片機和ARM處理器的比較3 1.4 以ARM為核的單片機4 1.4.1 處理器內核只和外部地址相關4 1.4.2 ARM怎樣組成一個單片機6 1.4.3 一點啟示7 第2章 ARM處理器基礎 2.1 ARM處理器的數據格式8 2.1.1 基礎知識8 2.1.2 ARM處理器的存儲器結構9 2.1.3 ARM處理器的指令存儲或數據存儲13 2.1.4 地址對準15 2.2 處理器模式15 2.3 ARM內部寄存器17 2.3.1 ARM狀態時的寄存器17 2.3.2 Thumb狀態下的寄存器25 2.4 異常27 第3章 ARM7TDMI簡介 3.1 概述29 3.2 結構和框圖30 3.3.3 級流水線結構33 3.4 ARM處理器的尋址方式35 3.4.1 51系列與ARM系列尋址方法的比較35 3.4.2 寄存器尋址36 3.4.3 立即尋址36 3.4.4 寄存器移位尋址37 3.4.5 寄存器間接尋址39 3.4.6 變址尋址40 3.4.7 多寄存器尋址42 3.4.8 堆棧尋址42 3.4.9 尋址方式的應用43 3.4.1 0ARM指令尋址一覽表44 第4章 異常和中斷 4.1 概述45 4.2 復位異常46 4.3 未定義指令異常47 4.4 軟件中斷異常49 4.5 預取指中止異常49 4.6 數據中止異常50 4.7 中斷請求(IRQ)異常 51 4.8 快速中斷(FIQ)請求異常52 4.9 中斷源和中斷優先級53 4.10 異常中斷的進入和退出54 第5章 ARM指令集 5.1 概述56 5.2 指令可選后綴59 5.2.1 S后綴60 5.2.2 后綴60 5.2.3 B后綴61 5.2.4 T后綴61 5.2.5 條件后綴62 5.3 ARM數據傳送指令(存儲器訪問指令)64 5.3.1 關于數據傳送64 5.3.2 數據傳送中的幾個問題66 5.3.3 ARM數據傳送指令代碼表70 5.3.4 數據傳送指令代碼詳述71 5.4 ARM分支指令93 5.4.1 關于程序分支93 5.4.2 ARM分支指令詳解94 5.5 ARM數據處理指令98 5.5.1 ARM數據處理指令的特點98 5.5.2 第2操作數99 5.5.3 ARM數據處理指令代碼表101 5.5.4 ARM數據處理指令詳述103 5.6 ARM指令集中和協處理器有關的指令120 5.7 ARM指令集中的軟件中斷指令125 第6章 Thumb指令集 6.1 Thumb指令的特點129 6.2 Thumb指令和ARM指令的比較132 6.3 Thumb指令集中的數據傳送類指令134 6.4 Thumb指令集中的分支指令146 6.5 Thumb指令集中的數據處理指令152 6.6 Thumb指令集中的軟件中斷指令164 第7章 偽指令 7.1 偽指令概述166 7.2 與ARM指令相關的偽指令167 7.3 與Thumb指令相關的偽指令177 7.4 通用偽指令180 7.4.1 為變量定義和賦值的偽指令180 7.4.2 定義各類寄存器名稱的偽指令184 7.4.3 數據定義偽指令187 7.4.4 控制程序流向的偽指令196 7.4.5 其他偽指令201 第8章 ARM系統設計和程序設計 8.1 關于ARM處理器,我們學到了什么?207 8.2 程序設計的幾個問題209 8.3 ARM指令和 Thumb指令的兼容性214 8.4 匯編程序規則221 8.4.1 組成222 8.4.2 書寫格式223 8.4.3 匯編語言中的表達式224 8.5 匯編程序舉例231 第9章 C和C++語言的應用 9.1 匯編語言與C/C++語言的比較237 9.2 C/C++語言的編程規范238 9.2.1 注釋238 9.2.2 命名239 9.2.3 編輯風格239 9.3 如何編寫針對ARM的高效C語言程序240 9.3.1 以空間換時間240 9.3.2 使用數學方法解決問題242 9.3.3 使用位操作242 9.3.4 嵌入匯編243 9.4 C、C++語言與匯編語言的混合編程244 9.4.1 在C、C++程序中使用內嵌的匯編指令的語法格式244 9.4.2 在C、C++程序中使用內嵌的匯編指令的注意事項245 9.4.3 內嵌匯編指令的應用舉例247 9.4.4 從匯編程序中訪問C程序變量248 9.4.5 在C++程序中使用C程序頭文件249 9.4.6 匯編程序、C程序以及C++程序的相互調用舉例250 第10章 程序的編輯和編譯 10.1 程序設計過程254 10.1.1 編輯程序254 10.1.2 編譯程序255 10.1.3 連接和調試程序257 10.2 ARM處理器開發工具介紹258 10.2.1 ARM處理器仿真系統特點258 10.2.2 ADS集成開發環境259 10.2.3 ADS開發系統的系統資源261 10.2.4 系統軟件開發的步驟263 10.3 程序的編輯263 10.3.1 源程序是可移植的263 10.3.2 在CodeWarrior for ADS環境下編輯源文件266 10.3.3 建立工程項目總結271 10.3.4 建立C語言和C++語言源文件271 10.3.5 文件的管理272 10.3.6 編輯畫面的設置273 10.3.7 ADS編輯功能介紹279 10.3.8 屏幕分割設置282 10.4 程序的編譯283 10.4.1 有兩種方式可以實現程序的編譯283 10.4.2 命令行中的可選項和圖形方式中的可選項286 10.4.3 ADS中的可選項290 10.5 匯編器的應用291 10.5.1 ARM匯編器armasm中的可選項291 10.5.2 ARM匯編器應用298 10.5.3 應用舉例300 10.6 編譯器的應用303 10.6.1 ARM編譯器中的可選項303 10.6.2 ARM編譯器的應用317 第11章 程序的連接 11.1 幾個與連接有關的概念320 11.2 連接器的應用326 11.3 連接器選項設置334 11.4 連接器應用舉例347 第12章 ARM調試工具AXD 12.1 調試工具AXD361 12.1.1 ARM調試工具介紹361 12.1.2 調試工具AXD的使用方法363 12.2 在調試過程中使用斷點371 12.2.1 設置斷點371 12.2.2 執行到斷點處374 12.2.3 查找和修改斷點374 12.2.4 斷點管理下拉菜單374 12.2.5 觀察斷點375 12.2.6 刪除斷點376 12.3 AXD中其他工具介紹376 12.3.1 使用觀測項376 12.3.2 在調試程序時觀察變量381 12.3.3 在調試程序時使用符號表383 12.3.4 使用觀測點384 12.3.5 工具欄中的工具387 12.4 數據格式389 12.4.1 設置數據格式389 12.4.2 設置默認的數據顯示格式393
|