關(guān)于我們
書單推薦
新書推薦
|
嵌入式與實時操作系統(tǒng)
本書涵蓋了操作系統(tǒng)的基本概念和原則,展示了如何將它們應(yīng)用于設(shè)計和實現(xiàn)完整的嵌入式與實時操作系統(tǒng)。包括ARM架構(gòu)、ARM指令和編程、用于開發(fā)程序的工具鏈、用于軟件實現(xiàn)和測試的虛擬機、程序執(zhí)行映像、函數(shù)調(diào)用約定、運行時堆棧使用以及用匯編代碼鏈接C程序的所有基礎(chǔ)和背景信息。
出版者的話
譯者序 前言 關(guān)于作者 第1章 引言 1 1.1 關(guān)于本書 1 1.2 本書的動機 1 1.3 本書的目標讀者 1 1.4 本書的獨特之處 2 1.5 本書的內(nèi)容 3 1.6 本書可作為嵌入式系統(tǒng)的教科書 5 1.7 本書可作為操作系統(tǒng)的教科書 5 1.8 本書可用于自學(xué) 5 參考文獻 6 第2章 ARM體系結(jié)構(gòu)和程序設(shè)計 7 2.1 ARM處理器模式 7 2.2 ARM CPU寄存器 8 2.2.1 通用寄存器 8 2.2.2 狀態(tài)寄存器 8 2.2.3 ARM處理器模式的變更 9 2.3 指令流水線 10 2.4 ARM指令 10 2.4.1 條件標志和條件 10 2.4.2 分支指令 11 2.4.3 算術(shù)運算 11 2.4.4 比較運算 11 2.4.5 邏輯運算 12 2.4.6 數(shù)據(jù)移動操作 12 2.4.7 即時值和桶移位器 12 2.4.8 乘法指令 13 2.4.9 加載和存儲指令 13 2.4.10 基址寄存器 13 2.4.11 塊數(shù)據(jù)傳輸 13 2.4.12 堆棧操作 13 2.4.13 堆棧和子例程 14 2.4.14 軟中斷 14 2.4.15 PSR轉(zhuǎn)移指令 14 2.4.16 協(xié)處理器指令 14 2.5 ARM工具鏈 15 2.6 ARM系統(tǒng)模擬器 15 2.7 ARM程序設(shè)計 16 2.7.1 ARM匯編編程示例1 16 2.7.2 ARM匯編編程示例2 18 2.7.3 匯編和C語言的結(jié)合編程 19 2.8 設(shè)備驅(qū)動程序 25 2.8.1 系統(tǒng)內(nèi)存映射 26 2.8.2 GPIO編程 26 2.8.3 串行I/O的UART驅(qū)動程序 27 2.8.4 彩色LCD驅(qū)動程序 31 2.9 本章小結(jié) 44 思考題 44 參考文獻 45 第3章 中斷和異常處理 46 3.1 ARM異常 46 3.1.1 ARM處理器模式 46 3.1.2 ARM異常類型 47 3.1.3 異常向量表 48 3.1.4 異常處理程序 48 3.1.5 從異常處理程序返回 49 3.2 中斷 50 3.2.1 中斷類型 50 3.2.2 中斷控制器 50 3.2.3 主中斷控制器和輔中斷控制器 51 3.3 中斷處理 52 3.3.1 向量表內(nèi)容 52 3.3.2 硬件中斷序列 52 3.3.3 軟件中的中斷控制 53 3.3.4 中斷處理程序 54 3.3.5 非嵌套中斷處理程序 54 3.4 計時器驅(qū)動程序 55 3.4.1 ARM Versatile 926EJS計時器 55 3.4.2 計時器驅(qū)動程序?qū)崿F(xiàn) 55 3.5 鍵盤驅(qū)動程序 60 3.5.1 ARM PL050鼠標-鍵盤接口 60 3.5.2 鍵盤驅(qū)動程序原理 60 3.5.3 中斷驅(qū)動的驅(qū)動程序設(shè)計 60 3.5.4 鍵盤驅(qū)動程序?qū)崿F(xiàn) 61 3.6 UART驅(qū)動程序 66 3.6.1 ARM PL011 UART接口 66 3.6.2 UART寄存器 66 3.6.3 中斷驅(qū)動的UART驅(qū)動程序 67 3.7 安全數(shù)字卡 72 3.7.1 SD卡協(xié)議 72 3.7.2 SDC驅(qū)動程序 72 3.7.3 改進的SDC驅(qū)動程序 79 3.7.4 多扇區(qū)數(shù)據(jù)傳輸 80 3.8 向量中斷 83 3.8.1 ARM PL190向量中斷控制器 83 3.8.2 為向量中斷配置VIC 83 3.8.3 向量中斷處理程序 84 3.8.4 向量中斷的演示 84 3.9 嵌套中斷 86 3.9.1 為何需要嵌套中斷 86 3.9.2 ARM中的嵌套中斷 86 3.9.3 在SYS模式下處理嵌套中斷 87 3.9.4 嵌套中斷的演示 87 3.10 嵌套中斷和進程切換 90 3.11 本章小結(jié) 90 思考題 91 參考文獻 92 第4章 嵌入式系統(tǒng)的模型 93 4.1 嵌入式系統(tǒng)的程序結(jié)構(gòu) 93 4.2 超級循環(huán)模型 93 4.3 事件驅(qū)動模型 95 4.3.1 超級循環(huán)程序的缺點 95 4.3.2 事件 95 4.3.3 周期性事件驅(qū)動程序 95 4.3.4 異步事件驅(qū)動程序 99 4.4 事件的優(yōu)先級 100 4.5 進程模型 101 4.5.1 單處理器進程模型 101 4.5.2 多處理器進程模型 101 4.5.3 實地址空間進程模型 101 4.5.4 虛擬地址空間進程模型 101 4.5.5 靜態(tài)進程模型 101 4.5.6 動態(tài)進程模型 101 4.5.7 非搶占式進程模型 102 4.5.8 搶占式進程模型 102 4.6 單處理器內(nèi)核模型 102 4.7 單處理器操作系統(tǒng)模型 102 4.8 多處理器系統(tǒng)模型 102 4.9 實時系統(tǒng)模型 102 4.10 嵌入式系統(tǒng)軟件設(shè)計方法論 102 4.10.1 高級語言支持事件驅(qū)動編程 103 4.10.2 狀態(tài)機模型 103 4.10.3 StateChart模型 107 4.11 本章小結(jié) 107 思考題 107 參考文獻 108 第5章 嵌入式系統(tǒng)中的進程管理 109 5.1 多任務(wù) 109 5.2 進程的概念 109 5.3 多任務(wù)和上下文切換 109 5.3.1 一個簡單的多任務(wù)程序 109 5.3.2 上下文切換 111 5.3.3 多任務(wù)處理的演示 116 5.4 動態(tài)進程 117 5.4.1 動態(tài)進程的創(chuàng)建 117 5.4.2 動態(tài)進程的演示 119 5.5 進程調(diào)度 120 5.5.1 進程調(diào)度術(shù)語 120 5.5.2 進程調(diào)度的目標、策略和算法 120 5.5.3 嵌入式系統(tǒng)中的進程調(diào)度 121 5.6 進程同步 121 5.6.1 睡眠和喚醒 121 5.6.2 使用睡眠/喚醒的設(shè)備驅(qū)動程序 122 5.6.3 使用睡眠/喚醒的事件驅(qū)動嵌入式系統(tǒng) 125 5.6.4 使用睡眠/喚醒的資源管理 127 5.7 信號量 128 5.8 信號量的應(yīng)用 129 5.8.1 信號量鎖 129 5.8.2 互斥鎖 130 5.8.3 使用信號量的資源管理 130 5.8.4 等待中斷和消息 130 5.8.5 進程協(xié)作 130 5.8.6 信號量的優(yōu)勢 132 5.8.7 使用信號量的注意事項 132 5.8.8 在嵌入式系統(tǒng)中使用信號量 132 5.9 其他同步機制 134 5.9.1 OpenVMS中的事件標志 134 5.9.2 MVS中的事件變量 135 5.9.3 MVS中的ENQ/DEQ 136 5.10 高級同步的構(gòu)造 136 5.10.1 條件變量 136 5.10.2 管程 136 5.11 進程通信 137 5.11.1 共享內(nèi)存 137 5.11.2 管道 137 5.11.3 信號 141 5.11.4 消息傳遞 142 5.12 單處理器嵌入式系統(tǒng)的內(nèi)核 147 5.12.1 非搶占式UP內(nèi)核 147 5.12.2 非搶占式UP內(nèi)核的演示 154 5.12.3 搶占式UP內(nèi)核 154 5.12.4 搶占式UP內(nèi)核的演示 159 5.13 本章小結(jié) 160 思考題 161 參考文獻 162 第6章 ARM中的內(nèi)存管理 163 6.1 進程地址空間 163 6.2 ARM中的內(nèi)存管理單元 163 6.3 MMU寄存器 164 6.4 訪問MMU寄存器 165 6.4.1 啟用和禁用MMU 165 6.4.2 域訪問控制 166 6.4.3 轉(zhuǎn)換表基址寄存器 166 6.4.4 域訪問控制寄存器 167 6.4.5 故障狀態(tài)寄存器 167 6.4.6 故障地址寄存器 168 6.5 虛擬地址轉(zhuǎn)換 168 6.5.1 轉(zhuǎn)換表基址 168 6.5.2 轉(zhuǎn)換表 168 6.5.3 一級描述符 169 6.6 段引用的轉(zhuǎn)換 169 6.7 頁引用的轉(zhuǎn)換 170 6.7.1 一級頁表 170 6.7.2 二級頁表描述符 170 6.7.3 小頁引用的轉(zhuǎn)換 171 6.7.4 大頁引用的轉(zhuǎn)換 171 6.8 內(nèi)存管理示例程序 171 6.8.1 使用1MB的段進行一級分頁 172 6.8.2 使用4KB的頁進行二級分頁 177 6.8.3 具有高VA空間的一級分頁 177 6.8.4 具有高VA空間的二級分頁 182 6.9 本章小結(jié) 184 思考題 184 參考文獻 184 第7章 用戶模式進程和系統(tǒng)調(diào)用 185 7.1 簡介 185 7.2 虛擬地址空間映射 185 7.3 用戶模式進程 186 7.4 系統(tǒng)內(nèi)核支持用戶模式進程 189 7.4.1 PROC結(jié)構(gòu) 189 7.4.2 復(fù)位處理程序 193 7.4.3 內(nèi)核代碼 195 7.4.4 內(nèi)核編譯鏈接腳本 201 7.4.5 具有用戶模式進程的內(nèi)核的演示 201 7.5 具有用戶模式進程的嵌入式系統(tǒng) 202 7.5.1 相同域中的進程 202 7.5.2 相同域中的進程的演示 202 7.5.3 具有單個域的進程 205 7.5.4 具有單個域的進程的演示 205 7.6 RAM磁盤 205 7.6.1 創(chuàng)建RAM磁盤映像 206 7.6.2 進程映像文件加載器 208 7.7 進程管理 210 7.7.1 進程創(chuàng)建 210 7.7.2 進程終止 210 7.7.3 進程族樹 211 7.7.4 等待子進程終止 212 7.7.5 UNIX/Linux中的fork-exec 213 7.7.6 fork的實現(xiàn) 213 7.7.7 exec的實現(xiàn) 215 7.7.8 fork-exec的演示 217 7.7.9 用于命令執(zhí)行的簡單sh 219 7.7.10 vfork 220 7.7.11 vfork的演示 221 7.8 線程 222 7.8.1 線程創(chuàng)建 223 7.8.2 線程演示 224 7.8.3 線程同步 225 7.9 具有二級分頁的嵌入式系統(tǒng) 225 7.9.1 二級靜態(tài)分頁 227 7.9.2 二級靜態(tài)分頁的演示 229 7.9.3 二級動態(tài)分頁 229 7.9.4 二級動態(tài)分頁的演示 231 7.10 KMH內(nèi)存映射 232 7.10.1 KMH使用一級靜態(tài)分頁 232 7.10.2 KMH使用二級靜態(tài)分頁 236 7.10.3 KMH使用二級動態(tài)分頁 236 7.11 嵌入式系統(tǒng)支持的文件系統(tǒng) 236 7.11.1 創(chuàng)建SDC映像 237 7.11.2 將SDC分區(qū)格式化為文件系統(tǒng) 237 7.11.3 為SDC分區(qū)創(chuàng)建循環(huán)設(shè)備 238 7.12 具有SDC文件系統(tǒng)的嵌入式系統(tǒng) 238 7.12.1 使用信號量的SDC驅(qū)動程序 238 7.12.2 使用SDC文件系統(tǒng)的系統(tǒng)內(nèi)核 242 7.12.3 SDC文件系統(tǒng)的演示 243 7.13 從SDC引導(dǎo)內(nèi)核映像 244 7.13.1 SDC引導(dǎo)程序 244 7.13.2 從SDC引導(dǎo)內(nèi)核的演示 248 7.13.3 從SDC引導(dǎo)使用動態(tài)分頁的內(nèi)核 249 7.13.4 兩階段引導(dǎo) 250 7.13.5 兩階段引導(dǎo)的演示 251 7.14 本章小結(jié) 252 思考題 252 參考文獻 253 第8章 嵌入式通用操作系統(tǒng) 254 8.1 什么是通用操作系統(tǒng) 254 8.2 什么是嵌入式通用操作系統(tǒng) 254 8.3 將通用操作系統(tǒng)移植到嵌入式系統(tǒng) 254 8.4 為ARM開發(fā)一個嵌入式通用操作系統(tǒng) 255 8.5 EOS的結(jié)構(gòu) 255 8.5.1 硬件平臺 255 8.5.2 EOS源文件樹 256 8.5.3 EOS內(nèi)核文件 256 8.5.4 EOS的功能 257 8.5.5 EOS的啟動順序 257 8.5.6 EOS的進程管理 258 8.5.7 EOS的匯編代碼 260 8.5.8 EOS的t.c文件 268 8.5.9 進程管理函數(shù) 271 8.5.10 管道 272 8.5.11 消息傳遞 272 8.5.12 消息傳遞的演示 274 8.6 EOS中的內(nèi)存管理 274 8.6.1 EOS的內(nèi)存映射 274 8.6.2 虛擬地址空間 275 8.6.3 內(nèi)核模式pgdir和頁表 275 8.6.4 進程用戶模式頁表 275 8.6.5 進程切換期間切換pgdir 276 8.6.6 動態(tài)分頁 276 8.7 異常和信號處理 277 8.8 EOS中的信號處理 279 8.8.1 PROC資源中的信號 279 8.8.2 EOS中的信號來源 279 8.8.3 傳遞信號給進程 279 8.8.4 更改內(nèi)核中的信號處理程序 279 8.8.5 EOS內(nèi)核中的信號處理 280 8.8.6 在用戶模式下調(diào)度信號捕捉器 280 8.9 設(shè)備驅(qū)動程序 281 8.10 EOS中的進程調(diào)度 281 8.11 EOS中的計時器服務(wù) 282 8.12 文件系統(tǒng) 283 8.12.1 文件操作級別 283 8.12.2 文件I/O操作 285 8.12.3 EOS中的EXT2文件系統(tǒng) 291 8.12.4 第一級FS的實現(xiàn) 293 8.12.5 第二級FS的實現(xiàn) 300 8.12.6 第三級FS的實現(xiàn) 305 8.13 塊設(shè)備的I/O緩沖 307 8.14 I/O緩沖區(qū)管理算法 308 8.15 用戶界面 310 8.15.1 init程序 311 8.15.2 login程序 311 8.15.3 sh程序 312 8.16 EOS的演示 312 8.16.1 EOS的啟動 312 8.16.2 EOS的命令處理 313 8.16.3 EOS的信號和異常處理 314 8.17 本章小結(jié) 315 思考題 315 參考文獻 316 第9章 嵌入式系統(tǒng)中的多處理器 317 9.1 多處理器 317 9.2 SMP系統(tǒng)的需求 317 9.3 ARM MPCore處理器 318 9.4 ARM Cortex-A9 MPCore處理器 319 9.4.1 處理器的核心 319 9.4.2 監(jiān)聽控制單元 319 9.4.3 通用中斷控制器 320 9.5 GIC編程示例 320 9.5.1 配置GIC以路由中斷 320 9.5.2 GIC配置代碼說明 327 9.5.3 中斷優(yōu)先級和中斷屏蔽 328 9.5.4 GIC編程的演示 328 9.6 ARM MPCore的啟動順序 328 9.6.1 原始啟動順序 328 9.6.2 引導(dǎo)程序輔助下的啟動順序 329 9.6.3 在虛擬機上引導(dǎo)SMP 329 9.7 ARM SMP啟動示例 329 9.7.1 ARM SMP啟動示例1 329 9.7.2 ARM SMP啟動示例1的演示 335 9.7.3 ARM SMP啟動示例2 335 9.7.4 ARM SMP啟動示例2的演示 337 9.8 SMP的臨界區(qū) 337 9.8.1 SMP臨界區(qū)的實現(xiàn) 337 9.8.2 XCHG/SWAP操作的缺點 338 9.8.3 SMP的ARM同步指令 338 9.9 SMP中的同步原語 339 9.9.1 自旋鎖 339 9.9.2 自旋鎖示例 340 9.9.3 使用自旋鎖啟動SMP的演示 341 9.9.4 SMP中的互斥鎖 341 9.9.5 使用自旋鎖實現(xiàn)互斥鎖 342 9.9.6 使用互斥鎖啟動SMP的演示 343 9.10 全局計時器和本地計時器 344 9.11 SMP中的信號量 347 9.12 條件鎖定 348 9.12.1 條件自旋鎖 349 9.12.2 條件互斥鎖 349 9.12.3 條件信號量操作 350 9.13 SMP中的內(nèi)存管理 350 9.13.1 SMP中的內(nèi)存管理模型 351 9.13.2 統(tǒng)一VA空間 351 9.13.3 非統(tǒng)一VA空間 354 9.13.4 非統(tǒng)一VA空間中的并行計算 356 9.14 SMP中的多任務(wù) 359 9.15 用于進程管理的SMP內(nèi)核 360 9.15.1 ts.s文件 361 9.15.2 t.c文件 367 9.15.3 kernel.c文件 369 9.15.4 SMP中的設(shè)備驅(qū)動程序和中斷處理程序 372 9.15.5 SMP中進程管理的演示 376 9.16 通用SMP操作系統(tǒng) 377 9.16.1 SMP_EOS的組織結(jié)構(gòu) 377 9.16.2 SMP_EOS源文件樹 378 9.16.3 SMP_EOS內(nèi)核文件 378 9.16.4 SMP_EOS中的進程管理 379 9.16.5 保護SMP中的內(nèi)核數(shù)據(jù)結(jié)構(gòu) 380 9.16.6 SMP中的死鎖預(yù)防 382 9.16.7 調(diào)整UP算法以適用于SMP 384 9.16.8 SMP中的設(shè)備驅(qū)動程序和中斷處理程序 384 9.17 SMP_EOS演示系統(tǒng) 385 9.17.1 SMP_EOS的啟動順序 385 9.17.2 SMP_EOS的功能 386 9.17.3 SMP_EOS的演示 386 9.18 本章小結(jié) 386 思考題 387 參考文獻 388 第10章 嵌入式實時操作系統(tǒng) 389 10.1 RTOS的概念 389 10.2 RTOS中的任務(wù)調(diào)度 389 10.2.1 速率單調(diào)調(diào)度 389 10.2.2 最早截止期限優(yōu)先調(diào)度 390 10.2.3 截止期限單調(diào)調(diào)度 390 10.3 優(yōu)先級倒置 391 10.4 優(yōu)先級倒置的預(yù)防 391 10.4.1 優(yōu)先級上限 392 10.4.2 優(yōu)先級繼承 392 10.5 RTOS的概況 392 10.5.1 FreeRTOS 392 10.5.2 MicroC/OS 393 10.5.3 NuttX 393 10.5.4 VxWorks 394 10.5.5 QNX 395 10.5.6 實時Linux 395 10.5.7 現(xiàn)有RTOS的評價 397 10.6 RTOS的設(shè)計原則 400 10.6.1 中斷處理 400 10.6.2 任務(wù)管理 400 10.6.3 任務(wù)調(diào)度 400 10.6.4 同步工具 400 10.6.5 任務(wù)通信 400 10.6.6 內(nèi)存管理 401 10.6.7 文件系統(tǒng) 401 10.6.8 跟蹤與調(diào)試 401 10.7 單處理器RTOS 401 10.7.1 UP_RTOS的任務(wù)管理 401 10.7.2 UP_RTOS的任務(wù)同步 402 10.7.3 UP_RTOS的任務(wù)調(diào)度 402 10.7.4 UP_RTOS的任務(wù)間通信 403 10.7.5 臨界區(qū)的保護 403 10.7.6 文件系統(tǒng)和日志 403 10.7.7 具有靜態(tài)周期性任務(wù)和循環(huán)調(diào)度的UP_RTOS 404 10.7.8 具有靜態(tài)周期性任務(wù)和搶占式調(diào)度的UP_RTOS 416 10.7.9 具有共享資源的動態(tài)任務(wù)的UP_RTOS 422 10.8 多處理器RTOS 429 10.8.1 用于任務(wù)管理的SMP_RTOS內(nèi)核 430 10.8.2 調(diào)整UP_RTOS以適應(yīng)SMP 446 10.8.3 SMP_RTOS的嵌套中斷 449 10.8.4 SMP_RTOS的搶占式任務(wù)調(diào)度 450 10.8.5 基于SGI的任務(wù)切換 451 10.8.6 SMP_RTOS的分時任務(wù)調(diào)度演示 453 10.8.7 SMP_RTOS的搶占式任務(wù)調(diào)度演示 455 10.8.8 優(yōu)先級繼承 458 10.8.9 SMP_RTOS系統(tǒng)的演示 460 10.9 本章小結(jié) 464 思考題 464 參考文獻 465
你還可能感興趣
我要評論
|