《嵌入式系統應用教程》是進行嵌入式系統開發的入門教材。按照嵌入式系統學習的規律,《嵌入式系統應用教程》將內容分為嵌入式操作系統基礎、ARM體系結構和指令系統、嵌入式實驗三大部分。全書理論結合實踐,用淺顯易懂的語言來解釋理論,用簡單易行的實驗來驗證理論,使讀者在掌握實際操作技能的同時加深對理論的理解。
《嵌入式系統應用教程》可作為普通高等院校及高層次高等職業院校計算機類、電子類、通信類專業“嵌入式系統”相關課程的教材,也可作為廣大嵌入式系統愛好者和工程技術人員的參考用書。
《嵌入式系統應用教程》為中國通信學會普通高等教育“十二五”規劃教材立項項目。
嵌入式系統是以應用為中心,以計算機技術為基礎,軟硬件可定制,適用于不同應用場合,對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統。它一般由嵌入式微處理器、外圍硬件設備、嵌入式操作系統、用戶應用程序4個部分組成,用于實現對其他設備的控制、監視或管理等功能。嵌入式系統已經廣泛應用于科學研究、工業控制、軍事技術、交通通信、醫療衛生、消費娛樂等領域,人們日常使用的手機、PDA、汽車、智能家電、GPS等均是嵌入式系統的典型代表。
本書分3部分,共12章,逐步引導具有不同專業背景和基礎的讀者進入嵌入式系統開發領域。
第1章到第5章為第一部分。其中,第1章介紹了嵌入式系統的基本知識;第2章介紹了Linux系統在上位機中的安裝及其基本操作;第3章介紹了IAnux系統的常用命令和文本編輯工具:第4章介紹了嵌入式系統開發中經常用于連接上位機和下位機的I,inux網絡服務;第5章介紹了嵌入式系統開發中經常用到的Linux系統下的C語言編譯、調試和工程管理工具。
第一部分 嵌入式操作系統基礎 1
第1章 嵌入式系統概論 1
1.1 嵌入式系統的定義 1
1.2 嵌入式系統的發展過程 2
1.3 嵌入式系統的開發流程 3
1.4 嵌入式操作系統介紹 5
習題 6
第2章 Linux系統介紹 7
2.1 Linux的特點 7
2.2 Linux的安裝 9
2.2.1 安裝方式 9
2.2.2 以虛擬機方式安裝Linux 10
2.2.3 以多操作系統方式安裝Linux 17
2.3 X-Window圖形界面操作 18
2.3.1 桌面組件 19
2.3.2 面板 22
2.3.3 顯示配置 22
2.3.4 常用應用程序 23
2.4 網絡配置 27
2.4.1 圖形界面方式 28
2.4.2 命令行方式 29
習題 34
第3章 Linux常用命令 35
3.1 Linux文件與目錄 35
3.1.1 Linux中的文件類型 35
3.1.2 常用目錄 36
3.1.3 路徑 37
3.1.4 對文件操作的用戶分類 37
3.1.5 文件操作權限 37
3.1.6 文件名通配符 38
3.2 常用命令 38
3.2.1 文件類 38
3.2.2 權限類 52
3.2.3 磁盤類 55
3.2.4 模塊類 57
3.3 輸入輸出轉向和管道 59
3.3.1 輸入轉向 59
3.3.2 輸出轉向 59
3.3.3 管道 59
3.4 vi編輯器的使用 59
3.4.1 啟動vi編輯器 60
3.4.2 命令行狀態 60
3.4.3 編輯狀態 62
習題 62
第4章 與嵌入式系統開發相關的Linux服務 63
4.1 TFTP服務 63
4.1.1 檢測與安裝軟件包 63
4.1.2 服務器端設置 65
4.1.3 啟動TFTP服務 66
4.1.4 設置防火墻 67
4.1.5 TFTP服務客戶端 67
4.2 Telnet 70
4.2.1 Telnet簡介 70
4.2.2 啟動Telnet服務 70
4.2.3 測試服務 70
4.2.4 定制服務 71
4.3 NFS 72
4.3.1 NFS介紹 72
4.3.2 服務器端的配置 72
4.3.3 啟動服務 73
4.3.4 定制防火墻 73
4.3.5 使用服務 74
習題 74
第5章 Linux中的C語言編程 75
5.1 GCC 75
5.1.1 GCC介紹 75
5.1.2 GCC的使用 76
5.1.3 使用舉例 77
5.2 GDB 77
5.2.1 GDB介紹 77
5.2.2 GDB的使用 77
5.2.3 GDB的使用舉例 78
5.3 make工具 79
5.3.1 make工具介紹 79
5.3.2 makefile文件 79
5.3.3 make使用舉例 80
習題 81
第二部分 ARM體系結構和指令系統 82
第6章 ARM處理器 82
6.1 ARM公司簡介 82
6.2 ARM處理器的特點及其應用領域 83
6.3 ARM ISA概述 84
6.4 ARM處理器系列 88
6.4.1 ARM7系列 89
6.4.2 ARM9系列 90
6.4.3 ARM9E系列 90
6.4.4 ARM10E系列 91
6.4.5 ARM11系列 91
6.4.6 Cortex系列 92
6.4.7 SecurCore系列 93
6.5 ARM處理器編程模型 94
6.5.1 數據類型 94
6.5.2 處理器模式 94
6.5.3 寄存器組織 95
6.5.4 異常處理機制 98
6.5.5 存儲器組織結構 99
習題 100
第7章 ARM指令集 101
7.1 條件執行 101
7.2 操作數預處理 103
7.3 運算類指令 107
7.4 控制類指令 119
7.5 傳送類指令 126
7.6 Thumb指令集概述 133
習題 133
第8章 ARM匯編語言程序設計 134
8.1 用ADS調試ARM匯編語言程序 134
8.1.1 編輯ARM匯編語言源程序 135
8.1.2 在命令行方式下調試 136
8.1.3 在IDE環境下調試 136
8.2 ARM匯編語言程序基本結構 140
8.2.1 ARM匯編語言語句格式 140
8.2.2 ARM匯編語言程序格式 141
8.3 ARM匯編語言程序中的符號和表達式 143
8.3.1 ARM匯編語言中的符號 143
8.3.2 ARM匯編語言中的表達式 144
8.4 ARM匯編語言偽操作 148
8.4.1 符號定義偽操作 148
8.4.2 數據定義偽操作 150
8.4.3 雜項偽操作 154
8.4.4 匯編控制偽操作 160
8.4.5 信息報告偽操作 161
8.4.6 框架描述偽操作 162
8.5 ARM匯編語言程序偽指令 163
8.5.1 ADR 163
8.5.2 ADRL 164
8.5.3 LDR 165
8.6 ARM匯編語言程序宏指令 167
8.7 ARM匯編語言程序子程序 169
8.8 GNU ARM匯編簡介 170
8.8.1 GNU ARM匯編語言程序的基本結構和程序運行環境 170
8.8.2 GNU ARM匯編語言偽操作 171
8.8.3 GNU ARM匯編語言其他主要操作符 172
習題 172
第9章 C語言與ARM匯編語言的混合編程 173
9.1 ATPCS概述 173
9.1.1 寄存器的使用規則 174
9.1.2 數據棧使用規則 174
9.1.3 參數傳遞規則 175
9.2 使用內嵌匯編器 175
9.2.1 內嵌匯編的語法格式 176
9.2.2 內嵌匯編指令的用法 176
9.2.3 內嵌匯編指令應用舉例 177
9.3 從匯編代碼中訪問C程序全局變量 180
9.4 ARM匯編程序與C程序的相互調用 181
9.4.1 ARM匯編程序調用C程序 181
9.4.2 C程序調用ARM匯編程序 183
9.5 C語言與ARM匯編混合編程的實例 184
9.5.1 安裝UArmJtag 184
9.5.2 建立工程 185
9.5.3 編譯鏈接工程 189
9.5.4 調試程序 190
習題 191
第三部分 嵌入式實驗 192
第10章 建立嵌入式系統開發環境 192
10.1 認識博創經典UP-TECH-S2410/P270-DVP實驗箱 192
10.2 建立開發環境 193
10.2.1 實驗目的 193
10.2.2 實驗設備 193
10.2.3 實驗內容 193
10.2.4 實驗步驟 194
10.2.5 習題 195
10.3 給下位機燒寫軟件系統 196
10.3.1 實驗目的 196
10.3.2 實驗設備 196
10.3.3 實驗內容 196
10.3.4 實驗步驟 196
10.3.5 習題 199
第11章 基礎實驗 200
11.1 熟悉Linux開發環境 200
11.1.1 實驗目的 200
11.1.2 實驗設備 200
11.1.3 實驗內容 200
11.1.4 實驗步驟 200
11.1.5 習題 202
11.2 多線程應用程序設計 202
11.2.1 實驗目的 202
11.2.2 實驗設備 203
11.2.3 實驗內容 203
11.2.4 多線程程序設計 203
11.2.5 實驗步驟 208
11.2.6 習題 209
11.3 串行端口程序設計 209
11.3.1 實驗目的 209
11.3.2 實驗設備 209
11.3.3 實驗內容 209
11.3.4 實驗原理 209
11.3.5 實驗步驟 216
11.3.6 習題 217
11.4 A/D接口實驗 217
11.4.1 實驗目的 217
11.4.2 實驗設備 217
11.4.3 實驗內容 217
11.4.4 實驗原理 218
11.4.5 實驗步驟 225
11.4.6 習題 225
11.5 D/A接口實驗 226
11.5.1 實驗目的 226
11.5.2 實驗設備 226
11.5.3 實驗內容 226
11.5.4 實驗原理 226
11.5.5 實驗步驟 229
11.5.6 習題 229
11.6 CAN總線通信實驗 230
11.6.1 實驗目的 230
11.6.2 實驗設備 230
11.6.3 實驗內容 230
11.6.4 實驗原理 230
11.6.5 實驗步驟 235
11.6.6 習題 236
11.7 RS-485通信實驗 237
11.7.1 實驗目的 237
11.7.2 實驗設備 237
11.7.3 實驗內容 237
11.7.4 實驗原理 237
11.7.5 實驗步驟 241
11.7.6 習題 241
11.8 直流電動機實驗 242
11.8.1 實驗目的 242
11.8.2 實驗設備 242
11.8.3 實驗內容 242
11.8.4 實驗原理 242
11.8.5 實驗步驟 247
11.8.6 習題 248
11.9 7段LED和點陣式LED實驗 248
11.9.1 實驗目的 248
11.9.2 實驗設備 248
11.9.3 實驗內容 248
11.9.4 實驗原理 249
11.9.5 實驗步驟 252
11.9.6 習題 252
第12章 擴展實驗 253
12.1 小鍵盤實驗 253
12.1.1 實驗目的 253
12.1.2 實驗設備 253
12.1.3 實驗內容 253
12.1.4 實驗原理 253
12.1.5 實驗步驟 257
12.1.6 習題 257
12.2 嵌入式Web服務器 258
12.2.1 實驗目的 258
12.2.2 實驗設備 258
12.2.3 實驗內容 258
12.2.4 實驗原理 258
12.2.5 實驗步驟 264
12.2.6 習題 264
12.3 利用GDBServer在下位機中調試執行程序 265
12.3.1 實驗目的 265
12.3.2 實驗設備 265
12.3.3 實驗內容 265
12.3.4 實驗步驟 265
12.3.5 習題 266
12.4 設備驅動程序設計實驗 267
12.4.1 實驗目的 267
12.4.2 實驗設備 267
12.4.3 實驗內容 267
12.4.4 實驗原理 267
12.4.5 實驗步驟 279
12.4.6 習題 279
12.5 字符設備驅動實例——觸摸屏驅動實驗 280
12.5.1 實驗目的 280
12.5.2 實驗設備 280
12.5.3 實驗內容 280
12.5.4 實驗原理 280
12.5.5 實驗步驟 290
12.5.6 習題 290
12.6 LCD驅動控制實驗 291
12.6.1 實驗目的 291
12.6.2 實驗設備 291
12.6.3 實驗內容 291
12.6.4 實驗原理 291
12.6.5 實驗步驟 302
12.6.6 習題 303
12.7 音頻驅動及應用實驗 303
12.7.1 實驗目的 303
12.7.2 實驗設備 303
12.7.3 實驗內容 303
12.7.4 實驗原理 303
12.7.5 實驗步驟 313
12.7.6 習題 313
12.8 SD卡使用實驗 313
12.8.1 實驗目的 313
12.8.2 實驗設備 313
12.8.3 實驗內容 313
12.8.4 實驗原理 314
12.8.5 實驗步驟 327
12.8.6 習題 328
參考文獻 329
命令是Linux系統的重要內容,Linux系統的所有功能都通過命令執行。在實際使用中,為了減少系統的開銷,經常不使用圖形界面,此時,對系統的所有操作都需要以命令方式來執行。在嵌入式系統開發過程中,由于目標機的性能和配置較低,因此,一般情況下目標機僅具有命令窗口而沒有圖形界面,對目標機的所有操作都通過命令實現。
Linux系統具有非常豐富的命令,絕大多數命令具有大量的參數,要對這些命令進行詳細描述需要大量篇幅,在此,僅對嵌入式系統開發過程中,可能用到的命令進行簡單介紹,其他命令請參考相關資料。使用命令時,在命令后面加參數“-help”或者用“man”命令可以取得命令的詳細用法。
本章首先介紹Linux系統中常見文件類型和常用目錄,文件通配符用法、文件操作權限;然后,以實例方式示范常用命令的用法和參數選擇,簡單介紹輸入輸出轉向、管道功能;最后,對嵌入式系統開發過程中常用的vi編輯器進行較詳細的講解。