嵌入式實時操作系統(tǒng) ——基于ARM Mbed OS的應(yīng)用實踐
定 價:138 元
叢書名:嵌入式人工智能開發(fā)叢書
- 作者:王宜懷 等
- 出版時間:2022/7/1
- ISBN:9787121437625
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP316.2
- 頁碼:416
- 紙張:
- 版次:01
- 開本:16開
嵌入式實時操作系統(tǒng)是嵌入式人工智能與物聯(lián)網(wǎng)終端的重要工具和運行載體。本書以ARM Mbed OS實時操作系統(tǒng)為背景,闡述實時操作系統(tǒng)的線程、調(diào)度、延時函數(shù)、事件、消息隊列、線程信號、信號量、互斥量等基本要素,給出實時操作系統(tǒng)下的程序設(shè)計方法。本書分為基礎(chǔ)應(yīng)用篇(第1~7章)、原理剖析篇(第8~12章)及綜合實踐篇(第13、14章)三大部分,如果讀者只做實時操作系統(tǒng)下的應(yīng)用開發(fā),可只閱讀基礎(chǔ)應(yīng)用篇與綜合實踐篇;如果希望理解實時操作系統(tǒng)原理,那么建議通讀全書。
王宜懷,男,1962年2月生,博士,教授、博士生導(dǎo)師、網(wǎng)絡(luò)工程系主任;蘇州大學(xué)嵌入式系統(tǒng)與物聯(lián)網(wǎng)研究所所長;蘇州市政協(xié)常委、中國農(nóng)工民主黨蘇州市委常委;江蘇省計算機學(xué)會嵌入式系統(tǒng)與物聯(lián)網(wǎng)專業(yè)委員會主任、中國軟件行業(yè)協(xié)會嵌入式系統(tǒng)分會理事。主要研究方向:嵌入式系統(tǒng)、物聯(lián)網(wǎng)與智能控制技術(shù)。
第1篇 基礎(chǔ)應(yīng)用篇
第1章 實時操作系統(tǒng)的基本概念與線程基礎(chǔ)知識 3
1.1 實時操作系統(tǒng)的基本含義 3
1.1.1 嵌入式系統(tǒng)的基本分類 3
1.1.2 無操作系統(tǒng)與實時操作系統(tǒng) 4
1.1.3 實時操作系統(tǒng)與非實時操作系統(tǒng) 5
1.2 實時操作系統(tǒng)中的基本概念 6
1.2.1 線程與調(diào)度的基本含義 6
1.2.2 內(nèi)核的基本概念 7
1.2.3 線程的基本概念 9
1.3 線程的三要素、四種狀態(tài)及三種基本形式 10
1.3.1 線程的三要素 10
1.3.2 線程的四種狀態(tài) 11
1.3.3 線程的三種基本形式 13
1.4 本章小結(jié) 14
第2章 相關(guān)基礎(chǔ)知識 17
2.1 CPU內(nèi)部寄存器的分類及ARM Cortex-M處理器的主要寄存器 17
2.1.1 CPU內(nèi)部寄存器的分類 17
2.1.2 ARM Cortex-M處理器的主要寄存器 18
2.2 C語言中的構(gòu)造類型及編譯相關(guān)問題 21
2.2.1 C語言中的構(gòu)造類型 21
2.2.2 編譯相關(guān)問題 25
2.3 實時操作系統(tǒng)內(nèi)核使用的數(shù)據(jù)結(jié)構(gòu) 26
2.3.1 棧與堆 26
2.3.2 隊列 28
2.3.3 鏈表 29
2.4 匯編語言概述 36
2.4.1 匯編語言格式 36
2.4.2 常用偽指令簡介 38
2.5 本章小結(jié) 40
第3章 Mbed OS第一個樣例工程 41
3.1 Mbed OS簡介 41
3.2 軟件和硬件開發(fā)平臺 42
3.2.1 GEC架構(gòu)簡介 42
3.2.2 硬件平臺 43
3.2.3 軟件平臺 44
3.2.4 網(wǎng)上電子資源 45
3.3 第一個樣例工程 46
3.3.1 樣例程序功能 46
3.3.2 工程框架設(shè)計原則 46
3.3.3 無操作系統(tǒng)的工程框架 47
3.3.4 Mbed OS的工程框架 51
3.4 本章小結(jié) 56
第4章 實時操作系統(tǒng)下應(yīng)用程序的基本要素 57
4.1 中斷的基本概念及處理過程 57
4.1.1 中斷的基本概念 57
4.1.2 中斷處理的基本過程 58
4.2 時間嘀嗒與延時函數(shù) 60
4.2.1 時間嘀嗒 60
4.2.2 延時函數(shù) 60
4.3 調(diào)度策略 61
4.3.1 調(diào)度基礎(chǔ)知識 61
4.3.2 Mbed OS中使用的調(diào)度策略 62
4.3.3 Mbed OS中的固有線程 63
4.4 實時操作系統(tǒng)中的功能列表 64
4.4.1 就緒列表 64
4.4.2 延時列表 64
4.4.3 等待列表 64
4.4.4 條件阻塞列表 64
4.5 本章小結(jié) 65
第5章 同步與通信的應(yīng)用方法 67
5.1 實時操作系統(tǒng)中同步與通信的基本概念 67
5.1.1 同步的含義與通信手段 67
5.1.2 同步類型 68
5.2 事件 69
5.2.1 事件的含義及應(yīng)用場合 69
5.2.2 事件的常用函數(shù) 69
5.2.3 事件的編程舉例:通過事件實現(xiàn)中斷與線程的通信 71
5.2.4 事件的編程舉例:通過事件實現(xiàn)線程之間的通信 74
5.3 消息隊列 76
5.3.1 消息隊列的含義及應(yīng)用場合 76
5.3.2 消息隊列的常用函數(shù) 76
5.3.3 消息隊列的編程舉例 78
5.4 線程信號 82
5.4.1 線程信號的含義及應(yīng)用場合 82
5.4.2 線程信號的常用函數(shù) 83
5.4.3 線程信號的編程舉例 84
5.5 信號量 87
5.5.1 信號量的含義及應(yīng)用場合 87
5.5.2 信號量的常用函數(shù) 88
5.5.3 信號量的編程舉例 89
5.6 互斥量 92
5.6.1 互斥量的含義及應(yīng)用場合 92
5.6.2 互斥量的常用函數(shù) 94
5.6.3 互斥量的編程舉例 95
5.7 本章小結(jié) 98
第6章 底層硬件驅(qū)動構(gòu)件 99
6.1 嵌入式構(gòu)件概述 99
6.1.1 制作構(gòu)件的必要性 99
6.1.2 構(gòu)件的基本概念 99
6.1.3 嵌入式開發(fā)中構(gòu)件的分類 100
6.1.4 構(gòu)件的基本特征與表達(dá)形式 101
6.2 底層硬件驅(qū)動構(gòu)件設(shè)計原則與方法 102
6.2.1 底層硬件驅(qū)動構(gòu)件設(shè)計的基本原則 102
6.2.2 底層硬件驅(qū)動構(gòu)件設(shè)計要點分析 103
6.2.3 底層硬件驅(qū)動構(gòu)件封裝規(guī)范概要 104
6.2.4 封裝的前期準(zhǔn)備 105
6.3 底層硬件驅(qū)動構(gòu)件設(shè)計舉例 106
6.3.1 GPIO構(gòu)件 106
6.3.2 UART構(gòu)件 114
6.3.3 Flash構(gòu)件 119
6.3.4 ADC構(gòu)件 123
6.3.5 PWM構(gòu)件 127
6.4 應(yīng)用構(gòu)件及軟件構(gòu)件設(shè)計實例 131
6.4.1 應(yīng)用構(gòu)件設(shè)計實例 131
6.4.2 軟件構(gòu)件設(shè)計實例 133
6.5 本章小結(jié) 142
第7章 實時操作系統(tǒng)下的程序設(shè)計方法 143
7.1 程序穩(wěn)定性問題 143
7.1.1 穩(wěn)定性的基本要求 143
7.1.2 看門狗復(fù)位與定期復(fù)位的應(yīng)用 144
7.1.3 臨界區(qū)的處理 147
7.2 中斷服務(wù)程序設(shè)計、線程劃分及優(yōu)先級安排問題 148
7.2.1 中斷服務(wù)程序設(shè)計的基本問題 148
7.2.2 線程劃分的簡明方法 149
7.2.3 線程優(yōu)先級安排問題 149
7.3 利用信號量解決并發(fā)與資源共享的問題 150
7.3.1 并發(fā)與資源共享的問題 150
7.3.2 應(yīng)用實例 151
7.4 優(yōu)先級反轉(zhuǎn)問題 155
7.4.1 優(yōu)先級反轉(zhuǎn)問題的出現(xiàn) 155
7.4.2 Mbed OS中避免優(yōu)先級反轉(zhuǎn)問題的方法 157
7.5 本章小結(jié) 162
第2篇 原理剖析篇
第8章 理解Mbed OS的啟動過程 165
8.1 芯片啟動到main函數(shù)之前的運行過程 165
8.1.1 尋找第一條被執(zhí)行指令的存放處 165
8.1.2 通過啟動文件理解芯片啟動過程 167
8.2 Mbed OS啟動流程概要 169
8.2.1 相關(guān)宏定義及結(jié)構(gòu)體 169
8.2.2 棧和堆的配置 176
8.2.3 啟動過程概述 179
8.2.4 如何運行到主線程 181
8.2.5 啟動過程總流程源代碼 182
8.3 深入理解啟動過程(一):內(nèi)核初始化解析 183
8.3.1 內(nèi)核初始化準(zhǔn)備工作 183
8.3.2 進(jìn)入SVC中斷服務(wù)程序SVC_Handler 186
8.3.3 實際內(nèi)核初始化函數(shù) 187
8.3.4 返回流程 199
8.4 深入理解啟動過程(二):創(chuàng)建主線程、啟動內(nèi)核 200
8.4.1 創(chuàng)建主線程 201
8.4.2 啟動內(nèi)核 215
8.4.3 定時器線程函數(shù) 226
8.4.4 消息獲取與處理函數(shù) 228
8.4.5 線程延時等待函數(shù) 238
8.5 中斷服務(wù)程序SVC_Handler詳解 240
8.5.1 SVC_Handler功能概要 241
8.5.2 SVC_Handler完整流程 241
8.5.3 SVC_Handler功能分段解析 243
8.5.4 SVC_Handler完整代碼注釋 246
8.6 函數(shù)調(diào)用關(guān)系總結(jié)及存儲空間分析 249
8.6.1 啟動過程中函數(shù)的調(diào)用關(guān)系總結(jié) 250
8.6.2 啟動過程存儲空間分析 253
8.7 本章小結(jié) 257
第9章 理解時間嘀嗒 259
9.1 時間嘀嗒的建立與使用 259
9.1.1 SysTick定時器的寄存器 259
9.1.2 SysTick定時器的初始化 260
9.1.3 SysTick中斷服務(wù)程序 263
9.2 延時函數(shù) 266
9.2.1 線程延時等待函數(shù) 266
9.2.2 線程延時嘀嗒函數(shù) 267
9.2.3 其他時間嘀嗒函數(shù) 269
9.3 延時等待列表工作機制 271
9.3.1 線程插入延時等待列表函數(shù) 271
9.3.2 從延時等待列表中移除線程的函數(shù) 274
9.3.3 延時函數(shù)調(diào)度過程實例剖析 275
9.4 與時間相關(guān)的函數(shù) 279
9.4.1 獲取系統(tǒng)運行時間函數(shù) 280
9.4.2 日期轉(zhuǎn)時間戳函數(shù) 281
9.4.3 時間戳轉(zhuǎn)日期函數(shù) 283
9.5 本章小結(jié) 286
第10章 理解調(diào)度機制 287
10.1 ARM Cortex-M4的SVC和PendSV中斷的調(diào)度作用 287
10.1.1 SVC中斷的調(diào)度作用 287
10.1.2 PendSV中斷的調(diào)度作用 288
10.1.3 列表分析 288
10.2 中斷服務(wù)程序PendSV_Handler剖析 289
10.2.1 osRtxPendSV _Handler的功能概要 289
10.2.2 osRtxPendSV_Handler函數(shù)源代碼解析 290
10.2.3 跳轉(zhuǎn)到SVC_Context進(jìn)行上下文切換 291
10.2.4 PendSV_Handler函數(shù)完整代碼注釋 291
10.3 PendSV應(yīng)用舉例 292
10.3.1 PendSV在事件中的應(yīng)用 292
10.3.2 PendSV在線程信號中的應(yīng)用 296
10.4 本章小結(jié) 300
第11章 理解事件與消息隊列 301
11.1 事件 301
11.1.1 事件的相關(guān)結(jié)構(gòu)體 301
11.1.2 事件函數(shù)深入剖析 302
11.1.3 事件調(diào)度剖析 307
11.2 消息隊列 311
11.2.1 消息或消息隊列結(jié)構(gòu)體 311
11.2.2 消息隊列函數(shù)深入剖析 313
11.2.3 消息隊列調(diào)度剖析 318
11.3 本章小結(jié) 322
第12章 理解線程信號、信號量與互斥量 323
12.1 線程信號 323
12.1.1 線程操作函數(shù) 323
12.1.2 線程信號函數(shù)深入剖析 329
12.1.3 線程信號調(diào)度剖析 333
12.2 信號量 337
12.2.1 信號量控制塊結(jié)構(gòu)體 337
12.2.2 信號量函數(shù)深入剖析 337
12.2.3 信號量調(diào)度剖析 341
12.3 互斥量 345
12.3.1 互斥量結(jié)構(gòu)體 345
12.3.2 互斥量函數(shù)深入剖析 346
12.3.3 互斥量調(diào)度剖析 352
12.3.4 互斥量避免優(yōu)先級反轉(zhuǎn)問題調(diào)度剖析 356
12.4 本章小結(jié) 359
第3篇 綜合實踐篇
第13章 基于Mbed OS的AHL-EORS應(yīng)用 363
13.1 AHL-EORS簡介 363
13.1.1 硬件清單 363
13.1.2 硬件測試導(dǎo)引 364
13.2 卷積神經(jīng)網(wǎng)絡(luò)概述 364
13.2.1 卷積神經(jīng)網(wǎng)絡(luò)的技術(shù)特點 364
13.2.2 卷積神經(jīng)網(wǎng)絡(luò)原理 365
13.3 AHL-EORS選用模型分析 368
13.3.1 MobileNetV2模型 369
13.3.2 NCP模型 370
13.4 AHL-EORS的數(shù)據(jù)采集與訓(xùn)練過程 373
13.4.1 數(shù)據(jù)采集程序 373
13.4.2 模型訓(xùn)練與部署 376
13.5 在通用嵌入式計算機GEC上進(jìn)行的推理過程 377
13.6 本章小結(jié) 380
第14章 基于Mbed OS的NB-IoT應(yīng)用開發(fā) 381
14.1 窄帶物聯(lián)網(wǎng)應(yīng)用開發(fā)概述 381
14.1.1 窄帶物聯(lián)網(wǎng)簡介 381
14.1.2 NB-IoT應(yīng)用開發(fā)所面臨的難題及解決思路 382
14.1.3 直觀體驗NB-IoT數(shù)據(jù)傳輸 383
14.1.4 金葫蘆NB-IoT開發(fā)套件簡介 384
14.2 NB-IoT應(yīng)用架構(gòu)及通信基本過程 386
14.2.1 建立NB-IoT應(yīng)用架構(gòu)的基本原則 386
14.2.2 終端UE、信息郵局MPO與人機交互系統(tǒng)HCI的基本定義 386
14.2.3 基于信息郵局粗略了解基本通信過程 387
14.3 終端UE與云偵聽程序的通信過程 388
14.3.1 基于mbed的終端UE模板工程設(shè)計 389
14.3.2 云偵聽模板工程功能簡介 391
14.3.3 建立云偵聽程序的運行場景 392
14.3.4 運行云偵聽與終端UE模板工程 394
14.3.5 通信過程中的常見錯誤說明 396
14.4 通過Web網(wǎng)頁的數(shù)據(jù)訪問 397
14.4.1 運行Web模板觀察自己終端UE的數(shù)據(jù) 397
14.4.2 NB-IoT的Web網(wǎng)頁模板工程結(jié)構(gòu) 398
14.5 通過微信小程序的數(shù)據(jù)訪問 399
14.5.1 運行小程序模板觀察自己終端UE的數(shù)據(jù) 399
14.5.2 NB-IoT的微信小程序模板工程結(jié)構(gòu) 401
參考文獻(xiàn) 403