嵌入式Linux上的C語言編程實踐

嵌入式Linux上的C語言編程實踐

《嵌入式Linux上的C語言編程實踐》是2008年由電子工業出版社出版的圖書,作者是韓超、魏治宇、 廖文江等。

基本介紹

  • 書名:嵌入式Linux上的C語言編程實踐
  • 作者:韓超、魏治宇、 廖文江等
  • ISBN:9787121079993
  • 頁數:392頁
  • 定價:49.00元
  • 出版社電子工業出版社
  • 出版時間: 2009-2-1
  • 開本:16開
內容簡介,目錄,作者簡介,

內容簡介

目前嵌入式技術和Linux程式開發技術成為計算機界比較流行的兩大技術。作為一種非常基礎和常用的程式語言,C語言在嵌入式系統開發中體現了其強大的軟硬體操控能力。本書重點關注嵌入式Linux中的C語言編程,目的在於幫助讀者在基本掌握C語言的基礎上,逐漸掌握嵌入式Linux中的C語言開發技術。本書包含程式環境搭建、調試技術、庫函式、高級編程、程式最佳化等方面的知識。本書的講解由淺入深,知識點突出,其中的一些示例取自常見技術和項目中的精華,工程套用性強。
本書適合高校學生閱讀,幫助其向具有研發能力的工程技術人員過渡,同樣也適用於嵌入式軟體開發人員補充知識、開闊眼界。

目錄

第一部分 基礎知識
第1章 Linux環境下C語言的開發 2
1.1 Linux下的C語言開發環境 2
1.2 在Linux中使用C語言開發 3
1.2.1 開發流程和開發工具 3
1.2.2 Linux中程式的運行原理 4
第2章 嵌入式環境中的C語言開發 7
2.1 嵌入式C語言的開發環境 7
2.2 嵌入式開發中C語言編程要點 9
第二部分 Linux環境中
C語言的開發環境和工具
第3章 Linux的文本編輯工具VI 12
3.1 VI編輯器概述 12
3.1.1 VI簡介 12
3.1.2 VI的工作模式和使用
3.1.2 之前的準備 12
3.1.3 進入和退出VI 13
3.2 VI的增強版VIM 16
3.3 VI編輯器的基本使用方法 17
3.3.1 在螢幕上移動游標 17
3.3.2 插入文本 20
3.3.3 刪除文本 22
3.3.4 修改文本內容 25
3.3.5 替換文本內容 27
3.3.6 合併文本內容 30
3.3.7 移動文本內容 30
3.4 VI編輯器的命令和高級操作 32
3.4.1 VI常用命令的列表 32
3.4.2 VI的一些高級的操作和
3.1.2 使用技巧 35
第4章 GCC程式開發工具 39
4.1 GNU工具綜述 39
4.2 GCC的編譯和連線 43
4.2.1 工程示例 43
4.2.2 編譯、彙編和連線 46
4.2.3 動態庫 48
4.3 GCC的二進制工具 49
4.3.1 ar(歸檔工具) 49
4.3.2 readelf(讀取ELF格式
3.1.2 檔案信息) 51
4.3.3 strings(查看字元串) 54
4.3.4 nm(顯示符號信息) 55
4.3.5 strip(刪除符號) 57
4.3.6 objdump(顯示目標
3.1.2 檔案信息) 58
4.3.7 objcopy(複製目標檔案) 63
第5章 make工程管理工具 67
5.1 make和Makefile 67
5.1.1 make機制概述 67
5.1.2 make和Makefile的使用 68
5.2 Makefile使用示例 69
5.2.1 簡單的Makefile 69
5.2.2 Makefile中的依賴關係 71
5.2.3 Makefile中使用隱含規則
3.1.2 來編譯程式 73
5.2.4 Makefile中指定依賴關係的
3.1.2 編譯 76
5.3 自動生成Makefile 78
5.3.1 自動生成Makefile的意義和
3.1.2 相關工具 78
5.3.2 自動生成Makefile的流程 79
第6章 GDB調試工具 85
6.1 GDB簡介 85
6.2 使用GDB調試程式 86
6.2.1 基本操作 88
6.2.2 查看命令 90
6.2.3 高級命令 92
6.2.4 attach命令的使用 94
6.3 遠程GDB調試 95
6.3.1 本地GDB調試和遠程GDB
3.1.2 調試的比較 95
6.3.2 遠程GDB調試流程 97
6.3.3 遠程GDB調試示例 98
第三部分 庫函式
第7章 C語言標準庫函式 106
7.1 ISO的C語言標準庫函式
7.1 分類 106
7.2 標準格式化輸入/輸出類函式 107
7.2.1 scanf函式:格式化輸入
3.1.2 字元串 107
7.2.2 printf函式:格式化輸出
3.1.2 字元串 109
7.2.3 putchar函式:輸出字元到
3.1.2 標準輸出 111
7.2.4 getchar函式:從標準輸入
3.1.2 獲取字元 111
7.2.5 putc函式:向檔案輸出字元 112
7.2.6 getc函式:從檔案輸入字元 112
7.2.7 gets函式:獲得字元串 112
7.2.8 puts函式:輸出指定字元串 113
7.2.9 ungetc函式:把字元
3.1.2 寫回流中 113
7.3 字元處理類函式 114
7.4 字元串處理及轉換函式 116
7.4.1 sprintf函式:格式化輸出
3.1.2 字元串到一個緩衝區 116
7.4.2 strcat和strncat函式:
3.1.2 字元串連線 119
7.4.3 strcpy和strncpy函式:
3.1.2 字元串複製 120
7.4.4 strcmp和strncmp函式:
3.1.2 字元串比較 121
7.4.5 strlen函式:獲取字元串
3.1.2 長度 122
7.4.6 strchr和strrchr函式:字元/
3.1.2 字元串定位 122
7.4.7 strstr函式:字元串查找 123
7.4.8 strrev函式:字元串逆序 124
7.4.9 strupr和strlwr函式:字母
3.1.2 形式轉換 125
7.4.10 strdup和strndup函式:
3.1.2 字元串複製 125
7.4.11 memset函式:記憶體設定 126
7.4.12 memmove函式:記憶體移動 126
7.4.13 memcmp函式:記憶體比較 127
7.4.14 memcpy函式:記憶體複製 128
7.5 數學計算類函式 128
7.6 數據結構和算法類函式 133
7.6.1 bsearch函式:二元搜尋 133
7.6.2 lfind函式:線性搜尋 134
7.6.3 lsearch函式:線性搜尋 135
7.6.4 qsort函式:利用快速排序法
3.1.2 排列數組 136
7.6.5 rand函式:產生隨機數 136
7.6.6 srand函式:設定隨機
3.1.2 數種子 137
7.7 檔案I/O操作類相關函式 137
7.7.1 fopen函式:打開檔案 138
7.7.2 fclose函式:關閉檔案 139
7.7.3 fgetc函式:從檔案中讀取
3.1.2 一個字元 139
7.7.4 fputc函式:將一指定字元
3.1.2 寫入檔案流中 139
7.7.5 fgets函式:從檔案中讀取
3.1.2 一字元串 140
7.7.6 fputs函式:將一指定的
3.1.2 字元串寫入檔案內 140
7.7.7 rewind函式:重設檔案流的
3.1.2 讀寫位置為檔案開頭 141
7.7.8 ftell函式:取得檔案流的
3.1.2 讀取位置 141
7.7.9 fseek函式:移動檔案流的
3.1.2 讀寫位置 141
7.7.10 fwrite函式:將數據寫至
7.7.10 檔案流 142
7.7.11 fread函式:從檔案流讀取
7.7.10 數據 142
7.7.12 remove函式:刪除檔案 143
7.7.13 rename函式:更改檔案
7.7.10 名稱或位置 143
7.7.14 freopen函式:重新打開
7.7.10 檔案 144
7.7.15 fflush函式:同步緩衝區 144
7.7.16 fgetpos函式:獲得檔案
7.7.10 位置 145
7.7.17 fsetpos函式:設定檔案
7.7.10 位置 145
7.7.18 mktemp函式:建立臨時
7.7.10 檔案 146
7.7.19 tmpfile函式:臨時檔案 146
7.7.20 tmpnam:得到臨時檔案名稱 147
7.8 日期時間類函式 147
7.8.1 clock函式:獲得CPU時間 148
7.8.2 time函式:獲得當前日曆
7.8.2 時間 148
7.8.3 difftime函式:獲得時間
7.8.2 差值 148
7.8.4 gmtime函式:將日曆時間
7.8.2 轉換成UTC時間 149
7.8.5 mktime函式:將UTC時間
7.8.2 轉換成日曆時間 149
7.8.6 asctime函式:將UTC時間
7.8.2 轉換成字元串 149
7.8.7 ctime函式:將日曆時間轉換
7.8.2 成當地時間的字元串 150
7.8.8 localtime函式:將日曆時間
7.8.2 轉換成本地時間 150
7.8.9 strftime函式:轉換日期和
7.8.2 時間格式 151
7.9 國際化和本地化函式 152
7.9.1 setlocale函式:本地化控制
7.8.2 函式 153
7.9.2 localeconv函式:本地化
7.8.2 轉換 154
7.10 錯誤處理類函式 155
7.10.1 clearerr函式:清除流中的
7.10.1 結束指示符和錯誤指示符 155
7.10.2 feof函式:指示檔案結束 155
7.10.3 ferror函式:指示檔案出錯 156
7.10.4 perror函式:輸出出錯信息 156
7.10.5 errno函式:錯誤編號記錄 156
7.11 其他一些工具函式 157
7.11.1 assert函式:程式診斷 157
7.11.2 長跳轉函式 157
7.11.3 可變長的參數控制函式 160
7.11.4 獲取結構體成員函式
7.10.1 (宏) 161
7.12 一些標準庫中有用的宏 161
第8章 Linux中C語言的擴展庫
函式 163
8.1 檔案I/O操作函式 163
8.1.1 open函式:打開檔案 163
8.1.2 close函式:關閉檔案 164
8.1.3 read函式:讀檔案 165
8.1.4 write函式:寫檔案 165
8.1.5 lseek函式:檔案定位 167
8.1.6 ioctl函式:檔案控制 167
8.1.7 flock函式:鎖定檔案 167
8.1.8 mmap函式和munmap函式:
8.1.8 記憶體映射 168
8.1.9 create函式:創建新檔案 170
8.1.10 dup函式和dup2函式:
8.1.10 複製檔案描述符 171
8.1.11 fcntl函式:改變已打開的
8.1.10 檔案的屬性 171
8.2 檔案許可權相關的操作函式 172
8.2.1 access函式:判斷是否
8.2.1 具有存取檔案的許可權 172
8.2.2 chown函式和fchown函式:
8.2.1 改變檔案的所有者 173
8.2.3 chmod函式和fchmod函式:
8.2.1 改變許可權 173
8.2.4 unlink函式:刪除檔案 173
8.2.5 utime函式和utimes函式:
8.2.1 改變檔案時間 174
8.2.6 umask函式:設定建立
8.2.1 新檔案時的許可權掩碼 175
8.2.7 link函式:建立檔案連線 175
8.2.8 stat函式、fstat函式和lstat
8.2.1 函式:獲取檔案信息 175
8.3 用戶組操作函式 176
8.3.1 getgid函式和setgid函式:
8.2.1 獲得/設定組識別碼 176
8.3.2 getegid函式和setegid函式:
8.2.1 獲得/設定有效的組識別碼 177
8.3.3 getuid函式和setuid函式:
8.2.1 獲得/設定真實的用戶識別碼 177
8.3.4 geteuid函式和seteuid函式:
8.2.1 獲得/設定有效的用戶識別碼 178
8.3.5 getgroups函式和setgroups
8.2.1 函式:獲得/設定組代碼 178
8.4 信號類函式 179
8.4.1 kill函式:傳送信號給指定的
8.2.1 進程 181
8.4.2 raise函式:信號傳送函式 181
8.4.3 alarm函式:設定逾時函式 182
8.4.4 signal函式:信號安裝函式 182
8.5 進程處理函式 183
8.5.1 getpid函式和getppid函式:
8.2.1 獲得進程ID和父進程ID 183
8.5.2 fork函式:建立子進程 183
8.5.3 sleep函式和usleep函式:
8.2.1 讓進程暫停執行一段時間 185
8.5.4 exec函式族:找到可執行
8.2.1 檔案 185
8.5.5 _ exit函式和_Exit函式:
8.2.1 結束進程執行 188
第四部分 C語言高級編程
第9章 動態記憶體的堆與棧 190
9.1 程式記憶體區域的使用 190
9.1.1 靜態記憶體與動態記憶體 190
9.1.2 C語言中的動態記憶體 191
9.2 C程式中棧空間的使用 196
9.2.1 參數使用棧空間 196
9.2.2 自動變數使用棧空間 199
9.2.3 程式中較大的棧 201
9.2.4 棧空間的特性 202
9.3 C程式中的堆空間使用 203
9.3.1 分配和釋放堆記憶體的庫函式 203
9.3.2 庫函式使用 204
9.3.3 堆記憶體的特性 218
9.4 堆記憶體和棧記憶體使用的比較 222
9.4.1 利用返回值傳遞信息 222
9.4.2 利用參數傳遞信息 226
9.4.3 堆與棧記憶體管理的區別 231
第10章 函式指針的使用 232
10.1 函式指針的概念 232
10.1.1 C語言函式的本質 232
10.1.2 函式指針在C語言中的
10.1.2 意義 234
10.2 函式指針的使用 237
10.2.1 函式指針使用初步 237
10.2.2 函式指針的類型定義 240
10.2.3 函式指針作為結構體成員 242
10.2.4 函式指針作為函式的參數 243
10.2.5 函式指針作為函式的
10.2.5 返回值 244
10.2.6 函式指針數組 246
10.3 函式指針使用示例 248
第11章 回調函式的使用 252
11.1 回調函式的概念與作用 252
11.1.1 程式調用的方式 252
11.1.2 回調函式的作用 254
11.2 回調函式的語法 254
11.2.1 簡單的回調函式 254
11.2.2 完全形式的回調函式 256
11.3 回調函式的使用 259
11.3.1 qsort中的回調函式 259
11.3.2 atexit和on_exit函式的
10.2.5 註冊退出函式 263
第12章 C語言實現對象編程 268
12.1 C語言實現基於對象編程的
12.1 概念與作用 268
12.2 C語言基於對象編程實現
12.1 封裝 269
12.2.1 簡單的程式示例 269
12.2.2 C語言基於對象編程的
10.2.5 詳解 272
12.2.3 C語言基於對象編程與
10.2.5 C++面向對象編程的對比 275
12.3 C語言基於對象編程實現
12.3 部分繼承功能 278
12.3.1 利用數據結構的包含實現
10.2.5 繼承功能 279
12.3.2 利用私有指針實現繼承
10.2.5 功能 282
12.3.3 C語言實現繼承的總結 287
12.4 C語言基於對象編程實現
12.4 部分多態功能 288
12.4.1 利用操作指針組的包含
10.2.5 實現多態功能 288
12.4.2 C語言實現多態功能的總結 292
12.5 對C語言實現基於對象
12.5 編程的思考 292
12.5.1 C語言基於對象編程的
10.2.5 特性 292
12.5.2 C語言基於對象編程中接口、
10.2.5 實現和調用者的關係 293
第五部分 在嵌入式
環境下的C語言編程
第13章 C語言程式的記憶體布局 295
13.1 C語言程式的存儲區域 295
13.2 C語言程式的段 297
13.2.1 段的分類 297
13.2.2 程式中段的使用 298
13.3 可執行程式的連線 301
13.3.1 可執行程式的組成 301
13.3.2 各個目標檔案的關係 303
13.3.3 連線錯誤示例 304
13.4 C語言程式的運行 309
13.4.1 RAM調試運行 311
13.4.2 固化程式的XIP運行 312
13.4.3 固化程式的載入運行 313
13.4.4 C語言程式的運行總結 315
第14章 嵌入式C語言常用語法 317
14.1 記憶體指針操作 317
14.1.1 記憶體操作的意義 317
14.1.2 使用指針操作記憶體 319
14.1.3 volatile的使用 324
14.1.4 嵌入式系統指針的實際
10.2.5 套用 325
14.2 位操作 327
14.2.1 位操作的意義 327
14.2.2 位操作的語法 328
14.3 大小端與對齊問題 330
14.3.1 大小端問題 331
14.3.2 記憶體對齊問題 335
14.3.3 結構體成員的對齊問題 338
14.4 程式的跳轉 344
14.4.1 嵌入式系統程式跳轉的
10.2.5 類型 344
14.4.2 C語言中實現程式的跳轉 345
第15章 嵌入式C語言編程的技巧 348
15.1 程式的最佳化技巧 348
15.1.1 循環緩衝區 348
15.1.2 查表法 350
15.1.3 針對循環執行效率的
10.2.5 最佳化 353
15.2 關於小數運算 355
15.3 函式參數和返回值的傳遞 357
15.4 變數的初始化技巧 360
15.4.1 數組的初始化 360
15.4.2 結構體的初始化 362
15.4.3 變數的初始化總結 362
15.5 程式的調試和宏使用的技巧 363
15.5.1 列印檔案、函式和程式行 363
15.5.2 #:字元串化操作符 364
15.5.3 ##:連線操作符 366
15.5.4 調試宏的第一種定義方式 367
15.5.5 調試宏的第二種定義方式 368
15.5.6 對調試語句進行分級審查 369
15.5.7 條件編譯調試語句 370
15.5.8 使用do…while的宏定義 372
15.6 代碼剖析 373
參考文獻 378

作者簡介

韓超,畢業於北京交通大學電子學院,曾在北京亞嵌教育研究中心擔任嵌入式ARM-Linux系統平台的開發和教學工作,重視完整的知識體系與工程技術相結合。
魏治宇,畢業於北京交通大學電子學院,曾在北京亞嵌教育研究中心及其合作單位負責嵌入式Linux相關平台的教材編寫、軟體開發和實驗教學工作,對嵌入式系統理論知識與產品快速開發之間的關聯性有較深刻的理解。
寥文江,工學碩士,畢業於北京交通大學電子信息學院,目前在北京聯合大學自動化學院從事嵌入式及Linux教學工作。研究方向為嵌入式實時作業系統、FPGA、Soc等,參與完成多項國家級、省部級科研項目並發表多篇學術論文。

相關詞條

熱門詞條

聯絡我們