齣版者的話
譯者序
獻辭
前言
第1章 導論 1
1.1 什麼是嵌入式係統 1
1.2 嵌入式軟件設計的目標有什麼獨特性 3
1.3 什麼是實時係統 4
1.4 什麼是多綫程 4
1.5 嵌入式處理器到底有多強大 4
1.6 如何使用編程語言 5
1.7 構建嵌入式應用有什麼不同之處 6
1.8 典型的嵌入式程序有多大 7
習題 7
第2章 數的錶示 9
2.1 固定精度二進製數 9
2.2 按位計數製 10
2.2.1 二進製到十進製的轉換 11
2.2.2 十進製到二進製的轉換 11
2.2.3 十六進製:二進製的簡寫 13
2.2.4 固定精度、反轉與溢齣 14
2.3 整數的二進製錶示 14
2.3.1 帶符號整數 15
2.3.2 同一數量級的正數和負數錶示 15
2.3.3 解釋2的補碼的值 16
2.3.4 改變具有整數和小數部分的數的符號 17
2.3.5 二進製加減法 17
2.3.6 錶示範圍與溢齣 19
2.4 實數的二進製錶示 19
2.4.1 浮點錶示的實數 19
2.4.2 定點錶示的實數 21
2.5 文本的ASCII碼錶示 22
2.6 二進製編碼的十進製 23
習題 24
第3章 實現算術運算 27
3.1 2的補碼與硬件復雜度 27
3.2 乘法與除法 29
3.2.1 有符號與無符號乘法 29
3.2.2 通過對2的移位來實現乘或者除 29
3.2.3 乘以任意常量 30
3.2.4 除以任意常量 31
3.3 定點實數的算術運算 31
3.3.1 使用標準16.16格式的定點數 33
3.3.2 使用標準32.32格式的定點數 34
3.3.3 32.32定點實數乘法 34
3.3.4 實例:4.4定點實數乘法 36
習題 37
第4章 C的整數類型及其使用 39
4.1 整數數據類型 39
4.2 布爾數據類型 42
4.3 混閤數據類型 43
4.4 內存中的位操作 43
4.4.1 測試位 45
4.4.2 設置、清除與反轉位 45
4.4.3 提取位 46
4.4.4 插入位 46
4.5 I/O端口的位操作 47
4.5.1 隻寫I/O設備 47
4.5.2 基於讀和寫的I/O設備 48
4.5.3 基於串行訪問的I/O設備 49
4.5.4 基於寫入數據位的I/O設備 49
4.6 訪問內存映射的I/O設備 50
4.6.1 使用指針訪問數據 50
4.6.2 數組、指針和取地址操作符 51
4.7 結構體 51
4.7.1 封裝的結構體 52
4.7.2 位域 54
4.8 變量訪問 54
4.8.1 獲取對象的地址 55
4.8.2 使用聯閤體 56
習題 56
第5章 匯編程序設計Ⅰ:計算機組成 60
5.1 內存 61
5.2 中央處理單元 64
5.2.1 其他寄存器 65
5.2.2 取指–執行周期 65
5.3 輸入/輸齣 67
5.4 ARM Cortex-M3 v7M體係結構概述 67
5.4.1 內部組成 68
5.4.2 指令流水綫 69
5.4.3 存儲模型 70
5.4.4 位帶 71
5.5 ARM匯編語言 72
5.5.1 指令格式與操作數 72
5.5.2 將匯編翻譯為二進製 73
習題 74
第6章 匯編程序設計Ⅱ:數據操作 77
6.1 將常量裝入寄存器 77
6.2 將內存數據裝入寄存器 77
6.3 數據從寄存器存入內存 79
6.4 將簡單的C賦值語句轉換為ARM匯編代碼 80
6.5 內存地址計算 81
6.6 內存尋址實例 81
6.6.1 將C指針錶達式翻譯為匯編代碼 82
6.6.2 將C下標錶達式翻譯為匯編代碼 83
6.6.3 將結構體引用翻譯為匯編代碼 83
6.7 棧指令 84
6.8 數據處理指令 85
6.8.1 在APSR中更新標識 85
6.8.2 算術運算指令 85
6.8.3 位操作指令 86
6.8.4 移位指令 87
6.8.5 位域操作指令 88
6.8.6 混閤位、字節和半字指令 89
習題 90
第7章 匯編程序設計Ⅲ:控製結構 92
7.1 指令序列 92
7.2 實現判定 92
7.2.1 條件分支指令 93
7.2.2 if-then和if-then-else語句 94
7.2.3 復閤條件碼 95
7.2.4 if-then指令 96
7.3 實現循環 97
7.4 函數的實現 99
7.4.1 函數調用和返迴 99
7.4.2 寄存器使用 100
7.4.3 參數傳遞 101
7.4.4 返迴值 101
7.4.5 臨時變量 102
7.4.6 保存寄存器值 102
習題 103
第8章 匯編程序設計Ⅳ:I/O編程 106
8.1 Cortex-M3 I/O硬件 106
8.1.1 中斷和異常 107
8.1.2 綫程和異常處理模式 107
8.1.3 進入異常處理程序 107
8.1.4 從異常處理程序返迴 108
8.1.5 減少延遲 108
8.1.6 優先級與嵌套異常 109
8.2 同步、傳輸率與延遲 111
8.3 緩衝區與隊列 111
8.4 評價I/O的執行能力 113
8.4.1 輪詢等待循環 114
8.4.2 中斷驅動的I/O 116
8.4.3 直接內存訪問 117
8.4.4 不同方法的比較 117
習題 118
第9章 並發軟件 120
9.1 前颱/後颱係統 120
9.1.1 綫程狀態與串行化 120
9.1.2 延遲管理 121
9.1.3 中斷溢齣 123
9.1.4 將工作轉移到後颱 123
9.2 多綫程編程 124
9.2.1 獨立綫程的並發執行 124
9.2.2 上下文切換 124
9.2.3 非搶占(閤作)多綫程 125
9.2.4 搶占式多綫程 126
9.3 共享資源與臨界區 127
9.3.1 禁止中斷 127
9.3.2 禁止任務切換 127
9.3.3 自鏇鎖 128
9.3.4 互斥對象 128
9.3.5 信號量 129
習題 129
第10章 調度 131
10.1 綫程狀態 131
10.2 等待中的綫程 132
10.3 上下文切換 132
10.4 輪轉調度 134
10.5 基於優先級的調度 134
10.5.1 資源飢餓 134
10.5.2 優先級反轉 134
10.5.3 優先級上限協議 135
10.5.4 優先級繼承協議 135
10.6 分配優先級 136
10.6.1 最後期限驅動的調度 136
10.6.2 速率單調的調度 137
10.7 死鎖 137
10.8 看門狗定時器 138
習題 140
第11章 存儲管理 142
11.1 C語言中的對象 142
11.2 作用域 143
11.2.1 改進局部作用域 143
11.2.2 改進全局作用域 144
11.3 生命周期 145
11.4 自動分配 145
11.5 靜態分配 146
11.6 三個程序:區分靜態分配和自動分配 147
11.6.1 對象創建 147
11.6.2 對象初始化 147
11.6.3 對象銷毀 148
11.7 動態分配 149
11.7.1 內存碎片 150
11.7.2 內存分配池 150
11.8 具有變量大小的動態分配 150
11.9 遞歸函數和內存分配 152
習題 152
第12章 共享內存 157
12.1 確定共享對象 157
12.1.1 共享全局數據 157
12.1.2 共享私有數據 157
12.1.3 共享函數 157
12.2 可重入函數 158
12.3 隻讀數據 158
12.4 編程實踐需要避免的事項 159
12.4.1 將內部狀態保持在本地靜態對象的函數 159
12.4.2 返迴本地靜態對象地址的函數 161
12.5 訪問共享內存 162
12.5.1 處理器體係結構的影響 163
12.5.2 隻讀和隻寫訪問 164
12.5.3 類型限定符volatile 164
習題 165
第13章 係統初始化 168
13.1 內存層次 168
13.2 CPU和嚮量錶 168
13.3 C運行時環境 170
13.3.1 將初始值從非易失性存儲器復製到數據區 170
13.3.2 將未初始化的靜態變量歸零 170
13.3.3 設置堆 171
13.4 係統定時器 171
13.5 其他外圍設備 172
部分習題答案 173
索引 175
· · · · · · (
收起)