本書融入了實時系統、嵌入式系統和軟件工程的新概念和新主題,為開發實時嵌入式應用軟件描繪了一幅完整的圖像。在本書中,你不僅可以地理解與微處理器、中斷和系統引導過程相關的概念,領略到實時建模和調度的重要性,而且也將學習建模文檔、建模分析、設計模式和標準的一致性等軟件工程實踐。 本書分為四個部分,幫助你學習嵌入式系統的關鍵概念;第Ⅰ部分介紹了開發過程,包括微處理器和中斷章節——這是軟件工程師的基本主題;第Ⅱ部分專門介紹了實時系統的建模技術;第Ⅲ部分討論了軟件體系架構的設計;第Ⅳ部分檢驗了軟件的實現,并重點關注POSIX兼容的操作系統。 主要特色 涵蓋了的UML標準(UML 2.4) 超過20種具有代表性,可以在一個非常廣泛的實時嵌入式系統系列中重用的的設計模式實踐 在QNX中通過測試的示例代碼,QNX是在行業中廣泛采用的實時操作系統。 主要內容 不同嵌入式系統架構的利弊 POSIX實時擴展以及如何開發POSIX兼容的實時應用程序 如何使用實時UML記錄具有時序約束的系統設計 與跨平臺開發相關的概念以及所面臨的挑戰 多任務設計和任務間通信技術(共享內存對象、消息隊列、管道、信號) 如何使用內核對象(如信號量、互斥體、條件變量)來解決RTOS應用程序資源共享的問題 支持“資源管理器”這個概念的原理,以及如何使用資源管理器實現虛擬文件系統 實時調度和幾個關鍵算法的基本原則
本書介紹開發實時嵌入式軟件至關重要的三個方面。首先,開發實時嵌入式系統軟件涉及許多活動,包括需求規格說明、時序分析、體系架構設計、多任務設計以及跨平臺的測試和調試。本書涵蓋嵌入式軟件開發的全過程,對一些主題進行充分的解釋,而對另外一些主題則一筆帶過(例如,調試和測試)。
Xiaocong Fan是賓夕法尼亞州立大學計算機和軟件工程學院的副教授。他的研究領域包括軟件工程中的多智能體系統和形式化方法,以及先進的決策支持系統。他是一些智能系統(如RCAST和SMMall)的主要設計師。Fan博士是IEEE的高級會員。
第Ⅰ部分 引
第1章 嵌入式系統和實時系統導論 1
1.1 嵌入式系統 3
1.2 實時系統 4
1.2.1 軟實時系統 4
1.2.2 硬實時系統 5
1.2.3 實時系統的范圍 6
1.3 案例分析:雷達系統 7
1.4 習題 10
第2章 跨平臺開發 11
2.1 跨平臺開發流程 11
2.2 硬件架構 12
2.3 軟件開發 13
2.3.1 軟件設計 13
2.3.2 系統編程語言C/C 13
2.3.3 測試硬件無關模塊 18
2.4 生成目標映像 18
2.4.1 交叉開發工具鏈 18
2.4.2 可執行和鏈接格式 21
2.4.3 內存映射 26
2.4.4 案例研究:制作QNX映像 28
2.5 轉移可執行文件對象到
目標平臺 29
2.6 在目標系統上的集成測試 30
2.7 系統生產 30
2.8 習題 31
第3章 微處理器入門 33
3.1 微處理器簡介 33
3.1.1 常用的微處理器 33
3.1.2 微處理器特性 35
3.2 PIC18F8720微型芯片 38
3.2.1 存儲器組織 39
3.2.2 字寫模式 41
3.2.3 字節選擇模式 43
3.2.4 字節寫模式 45
3.3 Intel 8086 46
3.3.1 存儲器組織 47
3.3.2 獨立的I/O地址空間 48
3.3.3 存儲器地址空間 50
3.3.4 等待狀態 52
3.4 Intel Pentium 53
3.4.1 總線狀態轉換 56
3.4.2 存儲器組織 60
3.5 ARM926EJ-S 61
3.6 習題 64
第4章 中斷 67
4.1 中斷導論 67
4.2 外部中斷 67
4.2.1 非向量中斷 68
4.2.2 PIC和向量中斷 69
4.3 軟件中斷 74
4.4 內部中斷 75
4.5 ISR的設計模式 75
4.5.1 一般的ISR設計模式 75
4.5.2 具有服務器任務的ISR 76
4.5.3 ISR鏈 77
4.5.4 ISR級聯 78
4.5.5 與ISR進行數據共享 79
4.6 中斷響應時間 81
4.7 案例分析:x86 82
4.7.1 硬件中斷 84
4.7.2 綜合匯總 85
4.8 案例研究:ARM處理器 86
4.8.1 硬件中斷 87
4.8.2 綜合匯總 90
4.9 習題 91
第5章 嵌入式系統的引導過程 93
5.1 系統引導加載程序 93
5.2 系統的引導過程 94
5.2.1 加載嵌入式軟件 94
5.2.2 準備執行嵌入式軟件 95
5.3 案例研究:AT91SAM9G45
引導過程 96
5.4 加載嵌入在操作系統映像中的
ELF目標文件 96
5.5 案例研究:基于QNX嵌入式
系統的引導過程 97
5.6 習題 99
第Ⅱ部分 實時系統建模
第6章 UML結構建模基礎 103
6.1 統一建模語言 103
6.2 類圖和類建模 104
6.2.1 類 106
6.2.2 實例層次的關系 109
6.2.3 依賴關系 121
6.2.4 泛化關系 125
6.3 類建模原則 128
6.3.1 模型演化 128
6.3.2 子類化 130
6.3.3 最小信息冗余 131
6.3.4 重構 134
6.4 對象圖 137
6.5 包圖 138
6.5.1 包引入 138
6.5.2 包合并 139
6.6 習題 141
第7章 UML體系架構建模 143
7.1 體系架構的抽象層次 143
7.2 UML結構圖 144
7.3 建模組件 148
7.4 子系統建模 150
7.5 完整系統建模 153
7.6 部署圖 154
7.7 習題 155
第8章 UML行為建模的基礎 157
8.1 用例圖和用例建模 157
8.1.1 用例圖 157
8.1.2 用例描述 160
8.1.3 用例層次 161
8.2 序列圖 162
8.3 活動圖 167
8.4 習題 171
第9章 UML中有狀態行為的建模 173
9.1 狀態機圖的基礎 173
9.1.1 狀態 173
9.1.2 轉移和事件 174
9.1.3 偽狀態 175
9.1.4 用狀態機對網絡協議建模 176
9.2 復合狀態 178
9.2.1 進入點、退出點與歷史 179
9.2.2 并發 180
9.3 狀態行為的繼承 181
9.4 有狀態對象時序圖 183
9.5 舉例:雷達系統有狀態行為
的建模 184
9.5.1 收發機建模 185
9.5.2 鏈路驅動器的建模 186
9.5.3 指揮消息器的建模 188
9.6 習題 189
第10章 實時UML:通用資源
建模 191
10.1 實時UML配置文件 191
10.2 資源建模 194
10.2.1 UML核心資源模型 195
10.2.2 動作和動作執行 196
10.2.3 受保護資源的UML構
造型 197
10.2.4 資源使用 199
10.2.5 資源-客戶圖 200
10.3 時間建模 201
10.3.1 時間觀念 201
10.3.2 定時裝置 202
10.3.3 時間建模構造型 204
10.4 并發建模 206
10.5 習題 209
第11章 實時UML:模型分析 211
11.1 時序約束的啟發 211
11.2 RT-UML配置文件可調度性
建模子配置文件 214
11.2.1 RT-UML配置文件中的可
調度性分析的元概念 214
11.2.2 可調度性構造型 219
11.2.3 使用可調度性子配置
文件 221
11.3 RT-UML配置文件性能建模
子配置文件 223
11.3.1 RT-UML配置文件中的性
能分析的元概念 223
11.3.2 性能構造型 225
11.3.3 使用性能子配置文件 227
11.4 習題 231
第Ⅲ部分 實時系統設計
第12章 實時嵌入式系統軟件
架構 237
12.1 實時任務 237
12.1.1 最壞情況下的任務執行
時間 238
12.1.2 任務規范 239
12.1.3 任務時序圖 239
12.1.4 最壞情況下的響應時間 241
12.1.5 任務實現 242
12.2 輪詢架構 242
12.2.1 案例研究:體溫計 242
12.2.2 通用輪詢架構 250
12.2.3 最壞情況下的事件響應
時間 253
12.3 帶有中斷的輪詢 254
12.3.1 案例研究:西蒙游戲 254
12.3.2 通用架構 257
12.3.3 最壞情況下的事件響應
時間 259
12.4 基于隊列的架構 260
12.4.1 非搶占式FIFO隊列 261
12.4.2 非搶占式優先隊列 262
12.5 習題 264
第13章 POSIX和RTOS 267
13.1 POSIX簡介 267
13.1.1 POSIX進程和線程 268
13.1.2 POSIX實時擴展 269
13.1.3 POSIX的兼容性和
致性 275
13.2 任務的靜態結構和動態
行為 276
13.2.1 一般任務結構 276
13.2.2 任務狀態轉移 278
13.3 實時操作系統 279
13.4 POSIX實時調度策略 282
13.4.1 FIFO調度策略 282
13.4.2 輪詢調度策略 283
13.4.3 偶發服務器調度策略 284
13.5 其他實時調度策略 286
13.5.1 最小松弛度優先 286
13.5.2 最早截止期限優先 287
13.5.3 截止期限單調分配的
調度 288
13.5.4 速率單調分配的調度 288
13.6 習題 289
第14章 多任務 291
14.1 多任務簡介 291
14.2 多任務設計 292
14.2.1 任務標識 292
14.2.2 任務轉換 295
14.2.3 任務參數估計 299
14.3 多任務資源共享 301
14.3.1 資源死鎖 301
14.3.2 優先級反轉 302
14.4 解決資源死鎖 304
14.4.1 死鎖預防 304
14.4.2 死鎖檢測 304
14.4.3 死鎖避免 305
14.5 解決優先級反轉 307
14.5.1 優先級繼承協議 307
14.5.2 較高鎖協議 309
14.5.3 優先級天花板協議 310
14.6 習題 312
第15章 實時調度:時鐘驅動
方式 315
15.1 周期性調度簡介 315
15.1.1 若干假設 315
15.1.2 可搶占的非周期作業 316
15.2 點對點時鐘驅動調度 317
15.2.1 點對點時鐘驅動調度
程序 318
15.2.2 執行開銷 319
15.3 基于幀的調度 320
15.3.1 幀尺寸的約束 320
15.3.2 健壯的基于幀的調度 323
15.3.3 基于幀的調度程序 324
15.4 調度非周期作業 325
15.5 拆分任務 328
15.6 習題 330
第16章 實時調度:速率單調
方式 331
16.1 優先級分配 331
16.2 RMA原則 332
16.3 速率單調分析 335
16.4 完成時間測試 336
16.5 周期變換 339
16.6 通用的可調度性分析 342
16.6.1 具有阻塞時間項的任務 342
16.6.2 具有更早截止時間的
任務 346
16.6.3 示例 347
16.6.4 優先級相同的任務 350
16.7 習題 351
第17章 實時調度:偶發服務器
程序 355
17.1 偶發任務 355
17.2 偶發服務器程序 356
17.2.1 偶發服務器程序的相關
任務設計 356
17.2.2 驗收測試 358
17.3 樸素偶發服務器程序 360
17.3.1 任務設計 361
17.3.2 驗收測試 361
17.4 固定優先級的偶發服務器
程序 362
17.5 具有動態優先級的偶發
服務器程序 368
17.6 習題 371
第IV部分 實現模式
第18章 資源共享 375
18.1 共享變量 375
18.2 共享的內存 378
18.2.1 映射文件對象 380
18.2.2 共享的內存對象 382
18.3 信號量 384
18.3.1 任務同步 385
18.3.2 流控制 387
18.3.3 資源保護 387
18.3.4 信號量相關的POSIX
函數 389
18.3.5 信號量示例 390
18.4 互斥體 397
18.4.1 互斥體使用模式 398
18.4.2 互斥體相關的POSIX
函數 400
18.4.3 使用互斥體的例子 401
18.5 條件變量 404
18.5.1 柵欄同步 405
18.5.2 生產者-消費者模式 410
18.5.3 讀-寫鎖 414
18.6 習題 418
第19章 任務間通信:消息隊列 421
19.1 消息隊列簡介 421
19.2 消息隊列靜態結構和動態
轉移 421
19.3 消息隊列使用模式 424
19.3.1 單向通信 424
19.3.2 確認-單向通信 425
19.3.3 雙向通信 426
19.3.4 客戶端-服務器之間的
通信 427
19.4 與消息隊列相關的POSIX
函數 430
19.5 使用消息隊列的例子 432
19.6 習題 437
第20章 任務間通信:管道 439
20.1 管道簡介 439
20.2 管道的靜態結構和動態
狀態轉移 439
20.3 管道使用模式 442
20.4 與管道相關的POSIX函數 442
20.4.1 多個作者和讀者 444
20.4.2 在管道上POSIX的選擇
操作 445
20.5 使用管道的示例 446
20.6 習題 451
第21章 任務間通信:發送信號 453
21.1 POSIX信號簡介 453
21.2 信號處理 455
21.3 信號向量表和處理程序 455
21.4 POSIX信號函數 456
21.5 POSIX信號的QNX實現 457
21.5.1 示例:在不同進程中處理
信號 457
21.5.2 示例:控制任務服務器 460
21.6 來自ISR的自旋鎖和中斷
事件 463
21.6.1 POSIX自旋鎖 463
21.6.2 QNX事件結構 464
21.6.3 QNX應用程序的中斷
處理 465
21.6.4 示例:來自ISR的中斷
事件 466
21.7 QNX脈沖 473
21.7.1 QNX同步消息傳遞 473
21.7.2 QNX異步脈沖發生機制 476
21.7.3 分層消息傳遞模式 478
21.7.4 消息接收者的優先級
繼承 478
21.7.5 示例:簡單的計時管
理器 479
21.8 習題 488
第22章 軟件計時器管理 489
22.1 硬件計時器和軟件計時器 489
22.2 軟件計時管理器 491
22.2.1 鏈接到專用計時器ISR 492
22.2.2 使用OS計時器 492
22.3 計時輪 493
22.3.1 精度誤差 495
22.3.2 寬范圍計時器 497
22.4 分層計時輪 497
22.4.1 計時輪參考上下文和計時
器管理 498
22.4.2 實現 500
22.5 習題 502
第23章 QNX資源管理 505
23.1 QNX資源管理簡介 505
23.2 資源管理器體系架構 506
23.2.1 控制結構 507
23.2.2 關鍵數據結構 508
23.3 示例1:作為資源管理器的
計算器 508
23.3.1 上層結構 509
23.3.2 處理來自客戶端的消息 510
23.3.3 注冊到進程管理器 517
23.3.4 使用資源管理器 518
23.4 示例2:設備