嵌入式ARM開發實戰

嵌入式ARM開發實戰

《嵌入式ARM開發實戰》是2015年5月清華大學出版社出版的圖書,作者是[美] James A· Langbridge。

基本介紹

  • 中文名:嵌入式ARM開發實戰
  • 作者:[美] James A. Langbridge
  • 譯者: 陳青華 張龍傑 司維超
  • 出版社清華大學出版社
  • 出版時間:2015年5月1日 
  • 定價:49.8 元
  • ISBN:9787302396192
內容簡介,圖書目錄,

內容簡介

無論是iPad、Surface平板電腦、iPhone還是任天堂的DS(雙屏遊戲機),ARM微處理器技術都能支持它們運行。這些基於ARM的處理器僅用極少的能耗就提供了強有力的數值計算能力,這使得它們非常適用於移動設備。本指南將引領你進入嵌入式ARM開發的世界, 並指導你研究不同的系統常見的ARM處理器。本書探討了嵌入式ARM開發的基礎,包括處理器的概述、處理器使用的程式語言和很多程式設計示例。通過一步一步的詳細講解,你很快就能創建自己的第一個嵌入式應用程式。

圖書目錄

第Ⅰ部分 ARM系統和開發
第1章 ARM發展史 3
1.1 ARM的起源 4
1.1.1 Acorn決定創建新處理器的理由 6
1.1.2 Acorn變成ARM的原因 7
1.1.3 ARM不實際生產微處理器的原因 8
1.2 ARM的命名約定 10
1.2.1 如何辨別正在使用的處理器 11
1.2.2 ARM7TDMI和ARM926EJ-S處理器的差異 13
1.2.3 ARM7和ARMv7的差異 15
1.2.4 Cortex-M和Cortex-A的差異 15
1.3 製造商文獻資料 16
1.4 ARM在今天都做些什麼 16
1.5 本章小結 17
第2章 ARM嵌入式系統 19
2.1 ARM嵌入式系統的定義 22
2.1.1 晶片上的系統 23
2.1.2 嵌入式系統和系統程式設計之間的區別 24
2.1.3 最佳化的重要性 25
2.1.4 RISC架構的優勢 29
2.2 選擇合適的處理器 32
2.3 如何著手 34
2.3.1 可用的電路板 35
2.3.2 現有作業系統 38
2.3.3 最適合我的目的的編譯器 39
2.3.4 準備進行調試 40
2.3.5 是否有完整的開發環境 41
2.3.6 還需要知道什麼 42
2.4 本章小結 43
第3章 ARM架構 45
3.1 理解基礎知識 46
3.1.1 暫存器 47
3.1.2 堆疊 48
3.1.3 內部RAM 48
3.1.4 快取 49
3.2 開始了解不同的ARM子系統 51
3.2.1 處理器暫存器介紹 51
3.2.2 CPSR介紹 55
3.2.3 計算單元 57
3.2.4 流水線 58
3.2.5 緊耦合存儲器 60
3.2.6 協處理器 61
3.3 理解不同的概念 62
3.3.1 異常的概念 62
3.3.2 處理不同的異常 65
3.3.3 操作模式 66
3.3.4 向量表 68
3.3.5 存儲器管理 70
3.4 不同的技術 73
3.4.1 JTAG調試(D) 73
3.4.2 增強的DSP(E) 73
3.4.3 向量浮點(F) 74
3.4.4 EmbeddedICE(I) 75
3.4.5 Jazelle(J) 75
3.4.6 長乘法(M) 75
3.4.7 Thumb(T) 76
3.4.8 合成器(S) 76
3.4.9 TrustZone 77
3.4.10 NEON 78
3.4.11 big.LITTLE 78
3.5 本章小結 80
第4章 ARM彙編語言 81
4.1 彙編語言介紹 82
4.2 與計算機對話 82
4.3 學習彙編語言的理由 84
4.3.1 速度 85
4.3.2 空間 87
4.3.3 趣味性 88
4.3.4 編譯器並不完美 88
4.3.5 通過彙編語言理解計算機科學 89
4.3.6 使用彙編語言編寫 89
4.4 使用彙編語言 90
4.4.1 編寫啟動載入程式 90
4.4.2 逆向工程 91
4.4.3 最佳化 92
4.5 ARM彙編語言 93
4.5.1 指令格式 93
4.5.2 布局 94
4.5.3 條件代碼 94
4.5.4 更新條件標誌 98
4.5.5 定址模式 101
4.6 ARM彙編語言基礎 105
4.6.1 載入和存儲 105
4.6.2 值的設定 105
4.6.3 分支 105
4.6.4 數學 106
4.6.5 理解一個示範程式 106
4.7 本章小結 108
第5章 ARM入門 109
5.1 Hello World! 110
5.2 刨根問底 115
5.3 Hello World,這次來真的 118
5.4 軟體實現 123
5.5 存儲器映射 125
5.6 實際例子 129
5.6.1 Silicon Labs公司的STK3800 129
5.6.2 Silicon Labs公司的STK3200 135
5.6.3 Atmel公司的D20 Xplained Pro 144
5.7 案例分析:U-BOOT 154
5.8 機器學習:Raspberry Pi 156
5.8.1 引導程式 157
5.8.2 為Raspberry Pi編譯程式 158
5.8.3 接下來做什麼 159
5.9 本章小結 160
第6章 Thumb指令集 161
6.1 Thumb 163
6.2 Thumb-2技術 164
6.3 Thumb的執行方式 164
6.4 使用Thumb的優點 166
6.5 使用Thumb的核心 168
6.6 ARM-Thumb互動工作 171
6.7 Thumb-1介紹 172
6.7.1 可用的暫存器 172
6.7.2 被移除的指令 173
6.7.3 沒有條件語句 174
6.7.4 設定標誌 174
6.7.5 沒有桶形移位器 174
6.7.6 簡化的立即數 175
6.7.7 棧操作 175
6.8 Thumb-2介紹 175
6.8.1 新的指令 176
6.8.2 協處理器 178
6.8.3 DSP 178
6.8.4 FPU 178
6.9 編寫Thumb程式 179
6.10 本章小結 180
第7章 彙編指令 183
7.1 傳送指令 184
7.1.1 MOV 184
7.1.2 MVN 185
7.1.3 MOVW 186
7.1.4 MOVT 186
7.1.5 NEG 186
7.1.6 示例:從指令流載入32位常量 187
7.2 算術運算 189
7.2.1 ADD 190
7.2.2 ADC 190
7.2.3 SUB 191
7.2.4 SBC 191
7.2.5 RSB 191
7.2.6 RSC 192
7.2.7 示例:基本數學運算 192
7.3 飽和算術運算 193
7.3.1 QADD 194
7.3.2 QSUB 194
7.3.3 QDADD 194
7.3.4 QDSUB 195
7.4 數據傳遞 195
7.4.1 LDR 196
7.4.2 STR 197
7.4.3 示例:字元串複製 197
7.5 邏輯運算 198
7.5.1 AND 198
7.5.2 EOR 198
7.5.3 ORR 199
7.5.4 BIC 199
7.5.5 CLZ 199
7.6 比較運算 199
7.6.1 CMP 200
7.6.2 CMN 200
7.6.3 TST 200
7.6.4 TEQ 200
7.7 分支 201
7.7.1 B 201
7.7.2 BL 202
7.7.3 BX 202
7.7.4 BLX 203
7.7.5 示例:計數到零 203
7.7.6 示例:Thumb互動工作 203
7.7.7 MOV pc, lr是什麼 204
7.8 乘法 205
7.8.1 MUL 205
7.8.2 MLA 205
7.8.3 UMULL 206
7.8.4 UMLAL 206
7.8.5 SMULL 206
7.8.6 SMLAL 206
7.9 除法 207
7.9.1 SDIV 208
7.9.2 UDIV 208
7.10 多暫存器數據傳遞 208
7.10.1 STM 210
7.10.2 LDM 210
7.11.1 LSL 211
7.11.2 LSR 212
7.11.3 ASR 212
7.11.4 ROR 212
7.11.5 RRX 212
7.12 堆疊操作 213
7.12.1 PUSH 213
7.12.2 POP 213
7.12.3 示例:從子例程中返回 213
7.13 協處理器指令 214
7.13.1 MRC 214
7.13.2 MCR 215
7.14 其他指令 216
7.14.1 SVC 216
7.14.2 NOP 216
7.14.3 MRS 216
7.14.4 MSR 217
7.15 本章小結 217
第8章 NEON 219
8.1 NEON的優點 220
8.2 NEON支持的數據類型 222
8.3 用彙編語言使用NEON 223
8.3.1 暫存器的使用 223
8.3.2 載入和存儲數據 224
8.3.3 最佳化存儲器複製 229
8.3.4 NEON指令 230
8.4 在C語言中使用NEON 231
8.4.1 內部函式描述 232
8.4.2 使用NEON內部函式 235
8.4.3 將圖像轉換為灰度圖像 235
8.5 本章小結 239
第9章 調試 241
9.1 調試器介紹 242
9.1.1 調試器的作用 242
9.1.2 ARM的調試功能 243
9.2 調試的類型 246
9.2.1 循環 246
9.2.2 例程 247
9.2.3 中斷控制器 247
9.2.4 引導程式 247
9.3 調試器 248
9.3.1 GNU調試器 248
9.3.2 J-Link gdb調試器 250
9.4 調試例程 251
9.4.1 無限循環 251
9.4.2 未知異常 254
9.4.3 被零除 255
9.5 深入分析 256
9.5.1 數據中止 256
9.5.2 損壞的串列線路 258
9.5.3 64位計算 260
9.5.4 實時回響 262
9.6 本章小結 263
第10章 編寫最佳化C程式 265
10.1 代碼最佳化規則 266
10.1.1 不要一開始就最佳化 266
10.1.2 了解編譯器 266
10.1.3 了解你的代碼 267
10.2 性能分析 267
10.2.1 基於作業系統的性能分析 268
10.2.2 基於裸機的性能分析 269
10.3 C語言最佳化 272
10.3.1 基本例子 273
10.3.2 計數下降,不是上升 277
10.3.3 整數 278
10.3.4 除法 278
10.3.5 不要使用太多參數 279
10.3.6 指針,而不是對象 280
10.3.7 不要頻繁地更新系統存儲器 280
10.3.8 對齊 281
10.4 彙編最佳化 281
10.4.1 特定例程 282
10.4.2 處理中斷 282
10.5 硬體配置最佳化 284
10.5.1 頻率調節 284
10.5.2 配置快取 284
10.6 本章小結 287
第Ⅱ部分 參 考
附錄A 術語 291
A.1 分支預測 291
A.2 快取 292
A.3 快取命中 292
A.4 快取行 293
A.5 快取缺失 293
A.6 協處理器 293
A.7 CP10 294
A.8 CP11 294
A.9 CP14 294
A.10 CP15 294
A.11 循環 295
A.12 異常 295
A.13 中斷 295
A.14 Jazelle 296
A.15 JTAG 296
A.16 MIPS 296
A.17 NEON 297
A.18 失序執行 297
A.19 流水線 297
A.20 暫存器 298
A.21 SIMD 298
A.22 SOC 298
A.23 綜合器 299
A.24 TrustZone 299
A.25 向量表 299
附錄B ARM架構版本 301
B.1 ARMv1 302
B.2 ARMv2 303
B.3 ARMv3 303
B.4 ARMv4 305
B.5 ARMv5 305
B.6 ARMv6 306
B.7 ARMv6-M 306
B.8 ARM v7-A/R 307
B.9 ARM v7-M 307
B.10 ARMv8 308
附錄C ARM核心版本 309
C.1 ARM6 309
C.2 ARM7 310
C.3 ARM7TDMI 310
C.4 ARM8 311
C.5 StrongARM 311
C.6 ARM9TDMI 312
C.7 ARM9E 313
C.8 ARM10 313
C.9 XSCALE 314
C.10 ARM11 314
C.11 Cortex 315
C.11.1 Cortex-A 316
C.11.2 Cortex-R 320
C.11.3 Cortex-M 321
附錄D NEON內聯函式和指令 325
D.1 數據類型 325
D.2 數據通道類型 326
D.3 彙編語言指令 327
D.4 內聯函式命名規則 331
附錄E 彙編語言指令 333
E.1 ARM指令 333
E.1.1 算術運算指令 333
E.1.2 並行運算 337
E.1.3 傳送 339
E.1.4 載入 340
E.1.5 存儲 342
E.1.6 邏輯 343
E.1.7 比較 344
E.1.8 飽和 344
E.1.9 分支 345
E.1.10 擴展 347
E.1.11 其他 349
E.2 Cortex-M核心中的Thumb指令 351

相關詞條

熱門詞條

聯絡我們