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