《嵌入式Linux C語言程序設計基礎教程》立足基礎,可操作性強,可作為高等院校嵌入式技術專業以及電子信息類其他專業的教材,也可供嵌入式愛好者自學參考。
《嵌入式Linux C語言程序設計基礎教程》介紹開發工具和Linux C語言基礎包括嵌入式Linux C語言中的數據、數據的輸入和輸出、運算符和表達式、程序結構和控制語句、數組、指針及函數、嵌入式Linux C語言高級用法、內核常見數據結構的解析與應用等,并設置了嵌入式Linux C函數參考附錄。
第1章 嵌入式Linux C語言開發工具 1
1.1 嵌入式Linux下C語言概述 1
1.1.1 C語言簡史 1
1.1.2 C語言特點 2
1.1.3 嵌入式Linux C語言編程環境 3
1.2 嵌入式Linux編輯器vi的使用 3
1.2.1 vi的基本模式 4
1.2.2 vi的基本操作 4
1.2.3 vi的使用實例分析 9
1.3 嵌入式Linux編譯器GCC的使用 10
1.3.1 GCC概述 10
1.3.2 GCC編譯流程分析 11
1.3.3 GCC警告提示 13
1.3.4 GCC使用庫函數 15
1.3.5 GCC代碼優化 17
1.4 嵌入式Linux調試器GDB的使用 17
1.4.1 GDB使用實例 18
1.4.2 設置/刪除斷點 21
1.4.3 數據相關命令 22
1.4.4 調試運行環境相關命令 22
1.4.5 堆棧相關命令 23
1.5 make工程管理器 23
1.5.1 Makefile基本結構 24
1.5.2 Makefile變量 25
1.5.3 Makefile規則 28
1.5.4 make使用 30
1.6 eclipse集成開發環境 30
1.6.1 eclipse簡介 30
1.6.2 eclipse 相關術語 30
1.6.3 安裝eclipse集成開發環境(假設宿主機環境為ubuntu8.10) 32
1.6.4 eclipse的使用 33
小結 44
思考與練習 44
第2章 數據 46
2.1 ANSI C與GNU C 46
2.1.1 ANSI C簡介 46
2.1.2 GNU C簡介 47
2.2 基本數據類型 48
2.2.1 整型家族 48
2.2.2 實型家族 50
2.2.3 字符型家族 52
2.2.4 枚舉家族 54
2.2.5 指針家族 55
2.3 變量與常量 57
2.3.1 變量的定義 57
2.3.2 typedef 58
2.3.3 常量的定義 59
2.3.4 作用域 60
2.3.5 鏈接屬性 62
2.3.6 存儲模型 63
2.4 預處理 67
2.4.1 預定義 67
2.4.2 文件包含 73
2.4.3 條件編譯 74
2.5 需要注意的問題 76
2.5.1 字長和數據類型 76
2.5.2 數據對齊 77
2.5.3 字節序 77
小結 78
思考與練習 78
第3章 數據的輸入輸出 79
3.1 數據的輸出 79
3.1.1 字符輸出函數putchar 79
3.1.2 格式化輸出函數printf 80
3.2 數據的輸入 83
3.2.1 字符輸入函數getchar 83
3.2.2 格式化輸入函數scanf 84
3.3 數據輸入輸出綜合示例 89
3.4 字符串輸入輸出函數 90
小結 91
思考與練習 92
第4章 運算符和表達式 93
4.1 概述 93
4.2 運算符和表達式 94
4.2.1 算術運算符和表達式 94
4.2.2 賦值運算符和表達式 97
4.2.3 逗號運算符和表達式 101
4.2.4 位運算符和表達式 101
4.2.5 關系運算符和表達式 105
4.2.6 邏輯運算符和表達式 107
4.2.7 sizeof操作符 110
4.2.8 條件運算符 111
4.2.9 運算符優先級總結 112
小結 114
思考與練習 114
第5章 程序結構和控制語句 115
5.1 C語言程序結構 115
5.2 C語言控制語句 116
5.2.1 條件判斷語句 116
5.2.2 循環語句 125
5.2.3 轉向語句 129
小結 133
思考與練習 133
第6章 數組 134
6.1 一維數組 134
6.1.1 數組的定義 134
6.1.2 一維數組的引用 135
6.1.3 一維數組的初始化 136
6.1.4 一維數組的內存分配 138
6.1.5 一維數組程序舉例 139
6.2 多維數組 141
6.2.1 多維數組定義及初始化 141
6.2.2 二維數組的內存分配 142
6.2.3 深入理解二維數組 143
6.2.4 二維數組程序舉例 144
6.3 字符數組 146
6.4 字符串 147
6.4.1 字符串的定義 147
6.4.2 字符串的輸入輸出 148
6.4.3 字符串處理函數 149
小結 153
思考與練習 154
第7章 指針 155
7.1 指針基礎 155
7.1.1 指針變量的定義 156
7.1.2 指針變量的賦值 156
7.1.3 指針變量的引用 158
7.2 指針的運算 161
7.2.1 指針的算術運算 161
7.2.2 指針的關系運算 163
7.2.3 空指針 166
7.3 指針與數組 166
7.3.1 指針與一維數組 166
7.3.2 指針與多維數組 169
7.4 多級指針 172
7.4.1 多級指針的定義及引用 172
7.4.2 多級指針的運算 173
7.5 指針數組 174
7.5.1 指針數組的定義及初始化 174
7.5.2 理解指針數組名 175
7.6 const與指針 177
7.7 void指針 179
7.8 字符指針 180
7.8.1 字符串 180
7.8.2 字符指針數組 182
小結 183
思考與練習 183
第8章 函數 185
8.1 函數基礎 185
8.1.1 函數定義和聲明 186
8.1.2 函數的調用、參數傳遞和返回值 187
8.1.3 函數和數組 194
8.1.4 main函數的參數 197
8.2 指針函數 197
8.2.1 指針函數的定義和使用 197
8.2.2 指針函數程序舉例 200
8.3 函數指針 202
8.3.1 函數指針的聲明 202
8.3.2 定義函數指針類型 204
8.3.3 函數指針數組 204
8.3.4 函數指針程序舉例 205
8.4 遞歸函數 207
8.4.1 遞歸函數的定義 207
8.4.2 函數調用機制說明 208
8.4.3 遞歸調用的形式 208
8.4.4 遞歸的條件 209
8.5 attribute機制介紹 210
小結 217
思考與練習 217
第9章 用戶自定義數據類型 218
9.1 結構體 218
9.1.1 結構體的定義 218
9.1.2 結構體變量的聲明、使用及初始化 221
9.1.3 結構體數組 228
9.1.4 結構體指針 232
9.2 位域 233
9.2.1 位域的定義 233
9.2.2 位域變量的說明 235
9.2.3 位域的使用 236
9.3 共用體 237
9.4 枚舉 239
9.4.1 枚舉類型的定義 239
9.4.2 枚舉變量的聲明和使用 241
小結 243
思考與練習 243
第10章 嵌入式C語言的高級用法 245
10.1 內存管理 245
10.2 動態內存的申請和釋放 247
10.2.1 malloc函數 247
10.2.2 free函數 247
10.2.3 關于野指針 249
10.3 堆和棧的區別 252
10.4 動態內存程序舉例 253
10.5 C語言和匯編語言的接口 254
10.5.1 內聯匯編的語法 254
10.5.2 編譯器優化介紹 257
10.5.3 C語言關鍵字volatile 258
10.5.4 “memory”描述符 258
小結 258
思考與練習 259
第11章 嵌入式linux內核常見數據結構 261
11.1 鏈表 261
11.1.1 單向鏈表 261
11.1.2 雙向鏈表 265
11.1.3 循環鏈表 266
11.1.4 ARM Linux中鏈表使用實例 267
11.2 樹、二叉樹、平衡樹 269
11.2.1 樹的定義 269
11.2.2 二叉樹 270
11.2.3 平衡樹 276
11.2.4 ARM Linux中紅黑樹使用實例 278
11.3 哈希表 280
11.3.1 哈希表的概念及作用 280
11.3.2 哈希表的構造方法 281
11.3.3 哈希表的處理沖突方法 283
11.3.4 ARM Linux中哈希表使用實例 285
小結 286
思考與練習 286
附錄 嵌入式Linux C函數快速參考 287