第1章 什麼是嵌入式開發……………………………………………………………… 1
1.1 概 述 …………………………………………………………………………… 1
1.2 嵌入式開發需要哪些知識儲備 ………………………………………………… 1
1.2.1 嵌入式硬件知識 …………………………………………………………… 1
1.2.2 嵌入式軟件知識 …………………………………………………………… 5
1.3 常見的嵌入式開發平臺 ………………………………………………………… 5
1.3.1 單片機繫列 ………………………………………………………………… 5
1.3.2 ARM 繫列 ………………………………………………………………… 5
1.4 嵌入式ARM Linux繫統的構成
……………………………………………… 6
1.4.1 硬件電路基礎 ……………………………………………………………… 6
1.4.2 bootloader ………………………………………………………………… 6
1.4.3 內 核 ……………………………………………………………………… 6
1.4.4 文件繫統 …………………………………………………………………… 6
1.4.5 應用程序 …………………………………………………………………… 6
1.5 本章小結 ………………………………………………………………………… 8
第2章 嵌入式Linux繫統基礎………………………………………………………… 9
2.1 Linux繫統簡介 ………………………………………………………………… 9
2.1.1 使用Vmware虛擬機安裝Linux操作繫統 …………………………… 12
2.1.2 Linux的基本命令 ………………………………………………………… 19
2.2 Linux中vim編輯器的操作與編程…………………………………………… 35
2.2.1 vim編輯器的操作………………………………………………………… 35
2.2.2 在Linux下快速入門Linux C語言編程 ……………………………… 41
2.2.3 在Linux下使用GDB調試代碼 ………………………………………… 43
2.2.4 在Linux下Shell腳本基礎編程快速入門 ……………………………… 47
2.3 利用 Makefile管理軟件工程
………………………………………………… 59
2.4 在Linux下制作靜態庫和動態鏈接庫的方法
……………………………… 62
2.5 本章小結………………………………………………………………………… 64
第3章 C語言在嵌入式開發中的應用
……………………………………………… 65
3.1 嵌入式開發必知必會…………………………………………………………… 65
3.1.1 數據段、代碼段、堆棧段、BSS段的區別
………………………………… 65
3.1.2 位、字、字節、字符等基礎知識 …………………………………………… 68
3.1.3 進制轉換基礎……………………………………………………………… 68
3.1.4 嵌入式常用位運算基礎與深入學習……………………………………… 71
3.2 位運算項目……………………………………………………………………… 74
3.2.1 應用(一):如何分離一個數的高低位 …………………………………… 74
3.2.2 應用(二):如何將兩個字節合並為一個字節 …………………………… 76
3.2.3 應用(三):Linux內核中實現的高低位互換函數 ……………………… 77
3.2.4 應用(四):用嵌入式C語言快速翻轉一個數的二進制高低位
………… 78
3.2.5 實戰1:如何對一個有規律的數組表進行位移(LED彩燈案例)……… 80
3.2.6 實戰2:分離一個十六進制數取出相應的位1或位0
(簡單的音頻解碼案例)…………………………………………………… 82
3.3 預處理、 const、static以及字符串處理在嵌入式中的應用 ………………… 86
3.3.1 宏定義與typedef的區別
………………………………………………… 86
3.3.2 const關鍵字 ……………………………………………………………… 96
3.3.3 static關鍵字 ……………………………………………………………… 98
3.3.4 sizeof運算符 …………………………………………………………… 103
3.3.5 strcat 函數 ……………………………………………………………… 105
3.3.6 strcpy函數 ……………………………………………………………… 107
3.3.7 strlen函數 ……………………………………………………………… 109
3.3.8 strcmp函數 ……………………………………………………………… 111
3.4 C語言的內存管理與指針 …………………………………………………… 113
3.4.1 一維數組 ………………………………………………………………… 113
3.4.2 二維數組 ………………………………………………………………… 119
3.4.3 C語言之指針 …………………………………………………………… 122
3.4.4 為什麼內存是線性分布的 ……………………………………………… 131
3.4.5 深入淺出剖析函數指針與回調函數 …………………………………… 135
3.5 誰說面向過程的C語言不能面向對像
……………………………………… 144
3.5.1 C語言之結構體 ………………………………………………………… 144
3.5.2 C語言之結構體對齊 …………………………………………………… 147
3.5.3 C語言結構體實現原理深入分析 ……………………………………… 150
3.5.4 結構體的封裝性之結構體內嵌函數指針 ……………………………… 152
3.5.5 結構體的繼承性之結構體內嵌結構體 ………………………………… 153
3.5.6 結構體的多態性之結構體中的void *指針……………………… 155
3.5.7 Linux內核中offsetof宏與container_of宏深度剖析 ………………… 157
3.5.8 什麼是共用體、聯合體與大小端………………………………………… 160
3.6 C語言之標準C文件操作應用
……………………………………………… 163
3.6.1 fopen函數和fclose函數
……………………………………………… 163
3.6.2 fread函數和fwrite函數………………………………………………… 165
3.6.3 fseek函數………………………………………………………………… 167
3.6.4 sprintf函數 ……………………………………………………………… 168
3.7 一定要掌握的基本數據結構 ………………………………………………… 170
3.7.1 鏈 表 …………………………………………………………………… 170
3.7.2 隊 列 …………………………………………………………………… 179
3.7.3 棧 ………………………………………………………………………… 181
3.8 實戰項目 ……………………………………………………………………… 184
3.8.1 熟悉STM32單片機庫函數的使用
…………………………………… 184
3.8.2 彈彈方塊C語言實現…………………………………………………… 194
3.8.3 學生信息管理繫統的實現 ……………………………………………… 201
3.8.4 空洞文件與一次性產生多個文件 ……………………………………… 216
3.8.5 CheckSum軟件的設計原理與應用 …………………………………… 218
3.8.6 使用C語言編寫一個將二進制文件轉換為C數組頭文件的程序 …… 220
3.8.7 數據壓縮與解壓縮算法的C語言實現
………………………………… 224
3.8.8 字符串編碼解壓縮算法 ………………………………………………… 227
3.8.9 C語言之查表法項目運用 ……………………………………………… 229
3.9 本章小結 ……………………………………………………………………… 231
第4章 嵌入式Linux應用開發基礎………………………………………………… 232
4.1 文件I/O基礎編程
…………………………………………………………… 232
4.1.1 open函數與close函數
………………………………………………… 233
4.1.2 read函數與write函數
………………………………………………… 235
4.1.3 lseek函數………………………………………………………………… 237
4.1.4 ioctl函數 ………………………………………………………………… 238
4.1.5 opendir函數、readdir函數與closedir函數 …………………………… 239
4.1.6 stat函數 ………………………………………………………………… 240
4.1.7 文件I/O小結
…………………………………………………………… 242
4.2 進程的實戰開發 ……………………………………………………………… 242
4.2.1 進程的定義 ……………………………………………………………… 242
4.2.2 進程與程序的區別 ……………………………………………………… 243
4.2.3 fork函數 ………………………………………………………………… 243
4.2.4 vfork函數 ……………………………………………………………… 246
4.2.5 exec函數族 ……………………………………………………………… 248
4.2.6 特殊進程 ………………………………………………………………… 251
4.3 進程間通信 …………………………………………………………………… 256
4.3.1 管 道 …………………………………………………………………… 257
4.3.2 消息隊列 ………………………………………………………………… 261
4.3.3 共享內存 ………………………………………………………………… 268
4.3.4 信 號 …………………………………………………………………… 274
4.3.5 信號量 …………………………………………………………………… 278
4.4 多線程編程 …………………………………………………………………… 281
4.4.1 線程與多線程的定義 …………………………………………………… 281
4.4.2 進程與線程的區別與聯繫 ……………………………………………… 281
4.5 網絡編程 ……………………………………………………………………… 287
4.5.1 TCP/IP協議棧 ………………………………………………………… 287
4.5.2 TCP協議 ………………………………………………………………… 288
4.5.3 UDP協議………………………………………………………………… 300
4.6 實戰項目 ……………………………………………………………………… 304
4.6.1 Linux下音頻應用編程 ………………………………………………… __________304
4.6.2 Linux下FrameBuffer簡介
…………………………………………… 314
4.6.3 Linux下C語言BMP圖操作編程 …………………………………… 320
4.6.4 Linux下C語言input繫統應用編程 ………………………………… 324
4.6.5 簡易Linux終端版聊天室應用編程
…………………………………… 329
4.7 本章小結 ……………………………………………………………………… 338
第5章 C語言在Linux驅動中的應用 ……………………………………………… 339
5.1 簡單的Kconfig編程
………………………………………………………… 339
5.2 手把手教你實現字符設備驅動 ……………………………………………… 345
5.3 手把手教你實現 misc設備驅動……………………………………………… 355
5.4 手把手教你實現外部中斷 …………………………………………………… 359
5.5 手把手教你實現中斷底半部tasklet實現…………………………………… 364
5.6 手把手教你實現中斷底半部work queue…………………………………… 371
5.7 手把手教你實現簡單的Linux定時器
……………………………………… 375
5.8 手把手教你實現input設備驅動程序
……………………………………… 379
5.9 本章小結 ……………………………………………………………………… 386
參考文獻………………………………………………………………………………… 387
後
記………………………………………………………………………………… 389