本書采用GD32F303ZET6芯片的GD32F3蘋果派開發(fā)板,重點介紹FreeRTOS操作系統(tǒng)的原理與應用開發(fā)。全書共19章,前兩章簡要介紹了嵌入式操作系統(tǒng)和GD32F3蘋果派開發(fā)板;第3~19章分別介紹基準工程的創(chuàng)建、簡易操作系統(tǒng)的實現(xiàn),以及FreeRTOS的移植、任務管理、時間管理、消息隊列、二值信號量與計數(shù)信號量、互斥信號量、事件標志組、任務通知、軟件定時器、內(nèi)存管理、中斷管理、CPU利用率、流緩沖區(qū)、消息緩沖區(qū)和協(xié)程。全書程序代碼的編寫均遵循統(tǒng)一規(guī)范,且各章的工程均采用模塊化設計,以便于將各模塊應用在實際項目和產(chǎn)品中。本書配有豐富的資料包,涵蓋GD32F3蘋果派開發(fā)板原理圖、例程、軟件包、PPT等。資料包將持續(xù)更新,下載鏈接可通過微信公眾號“卓越工程師培養(yǎng)系列”獲取。本書既可以作為高等院校電子信息、自動化等專業(yè)微控制器相關課程的教材,也可以作為微控制器系統(tǒng)設計及相關行業(yè)工程技術人員的入門培訓用書。
董磊,深圳大學高級實驗師,主要從事卓越工程師培養(yǎng)以及醫(yī)療器械研發(fā)工作。先后主持10余項醫(yī)療器械研發(fā)項目,主持3項教育部產(chǎn)學合作協(xié)同育人項目、4項實驗室與設備管理研究基金項目、6項自制實驗儀器設備基金項目,獲得專利授權25項、軟件著作權10余項,發(fā)表論文10余篇。
第1章 嵌入式操作系統(tǒng)簡介 1
1.1 裸機系統(tǒng)與嵌入式操作系統(tǒng) 1
1.1.1 簡單裸機系統(tǒng) 1
1.1.2 基于定時器計時的裸機系統(tǒng) 2
1.1.3 嵌入式操作系統(tǒng) 2
1.2 操作系統(tǒng)的分類 3
1.2.1 分時操作系統(tǒng) 3
1.2.2 實時操作系統(tǒng) 3
1.3 FreeRTOS簡介 4
1.3.1 為什么選擇FreeRTOS 4
1.3.2 FreeRTOS的特點 4
1.3.3 商業(yè)許可 5
1.3.4 如何獲取相關資料 5
本章任務 5
本章習題 5
第2章 GD32F3蘋果派開發(fā)板簡介 6
2.1 為什么選擇GD32 6
2.2 GD32F3系列微控制器簡介 6
2.3 GD32F3蘋果派開發(fā)板電路簡介 8
2.4 基于FreeRTOS的應用實例 11
2.5 本書配套資料包 11
2.6 GD32微控制器開發(fā)工具安裝與
配置 12
2.6.1 安裝Keil μVision5 12
2.6.2 設置Keil μVision5 14
2.6.3 安裝CH340驅(qū)動 16
本章任務 16
本章習題 17
第3章 基準工程 18
3.1 GD32F30x系列微控制器的系統(tǒng)架
構與存儲器映射 18
3.1.1 系統(tǒng)架構 18
3.1.2 存儲器映射 19
3.2 GD32工程模塊名稱及說明 22
3.3 Keil編輯和編譯及程序下載過程 22
3.3.1 Keil編輯和編譯過程 23
3.3.2 程序下載過程 23
3.4 相關參考資料 23
3.5 代碼框架 24
3.6 實例與代碼解析 25
3.6.1 新建存放工程的文件夾 25
3.6.2 復制并編譯原始工程 25
3.6.3 LED文件對介紹 25
3.6.4 KeyOne文件對介紹 27
3.6.5 Delay文件對介紹 30
3.6.6 RCU文件對介紹 31
3.6.7 Timer文件對介紹 33
3.6.8 Main.c文件介紹 37
3.6.9 程序下載 39
3.6.10 運行結(jié)果 44
本章任務 44
本章習題 44
第4章 簡易操作系統(tǒng) 45
4.1 裸機系統(tǒng)與操作系統(tǒng)的區(qū)別 45
4.2 任務切換基本原理 45
4.3 CPU工作寄存器和棧區(qū) 45
4.4 中斷與異常 48
4.4.1 Cortex-M3/M4的中斷與異常 48
4.4.2 中斷/異常返回 50
4.4.3 SCV與PendSV異常 52
4.5 任務的特性 52
4.5.1 任務優(yōu)先級 52
4.5.2 任務狀態(tài) 52
4.5.3 不可剝奪內(nèi)核和可剝奪內(nèi)核 52
4.5.4 空閑任務 54
4.6 實例與代碼解析 54
4.6.1 復制并編譯原始工程 54
4.6.2 添加EasyOS文件對 55
4.6.3 完善EasyOS.h文件 55
4.6.4 完善EasyOS.c文件 56
4.6.5 完善Main.c文件 64
4.6.6 編譯及下載驗證 66
本章任務 67
本章習題 67
第5章 FreeRTOS的移植 68
5.1 FreeRTOS源碼的獲取 68
5.2 FreeRTOS源碼文件簡介 68
5.3 FreeRTOS配置宏定義簡介 69
5.4 實例與代碼解析 70
5.4.1 復制并編譯原始工程 70
5.4.2 移植 71
5.4.3 完善Main.c文件 72
5.4.4 下載驗證 75
本章任務 76
本章習題 76
第6章 任務管理 77
6.1 任務簡介 77
6.1.1 任務函數(shù) 77
6.1.2 任務狀態(tài) 78
6.1.3 任務優(yōu)先級 78
6.1.4 任務句柄 79
6.1.5 任務棧 79
6.1.6 任務管理相關API函數(shù) 79
6.2 任務控制塊(TCB) 83
6.3 列表和列表項 83
6.4 棧幀初始化 85
6.5 SVC異常處理 86
6.6 PendSV異常處理 87
6.7 實例與代碼解析 89
6.7.1 復制并編譯原始工程 89
6.7.2 編寫測試程序 89
6.7.3 編譯及下載驗證 90
本章任務 91
本章習題 91
第7章 時間管理 92
7.1 相對延時 92
7.2 絕對延時 92
7.3 時間管理相關API函數(shù) 92
7.4 實例與代碼解析 93
7.4.1 復制并編譯原始工程 93
7.4.2 編寫測試程序 93
7.4.3 編譯及下載驗證 95
本章任務 95
本章習題 95
第8章 消息隊列 96
8.1 隊列與循環(huán)隊列 96
8.2 數(shù)據(jù)存儲 97
8.3 多任務訪問 97
8.4 出隊阻塞 97
8.5 入隊阻塞 97
8.6 消息隊列集 98
8.7 消息隊列相關API函數(shù) 98
8.8 消息隊列集相關API函數(shù) 103
8.9 實例與代碼解析 107
8.9.1 復制并編譯原始工程 107
8.9.2 編寫測試程序 108
8.9.3 編譯及下載驗證 110
本章任務 111
本章習題 111
第9章 二值信號量與計數(shù)信號量 112
9.1 中斷延遲 112
9.2 二值信號量 113
9.3 計數(shù)信號量 115
9.4 相關API函數(shù) 116
9.5 實例與代碼解析 123
9.5.1 復制并編譯原始工程 123
9.5.2 編寫測試程序 123
9.5.3 編譯及下載驗證 124
本章任務 125
本章習題 125
第10章 互斥信號量 126
10.1 共享資源與互斥訪問 126
10.1.1 共享資源 126
10.1.2 通過臨界段實現(xiàn)資源管理 128
10.1.3 通過調(diào)度器實現(xiàn)資源管理 130
10.1.4 通過互斥信號量實現(xiàn)資源
管理 132
10.2 優(yōu)先級翻轉(zhuǎn)與繼承 133
10.2.1 優(yōu)先級翻轉(zhuǎn) 133
10.2.2 優(yōu)先級繼承 133
10.3 遞歸互斥信號量 134
10.4 死鎖 134
10.5 互斥信號量與調(diào)度器 134
10.6 守護任務 137
10.7 互斥信號量相關API函數(shù) 138
10.8 實例與代碼解析 140
10.8.1 復制并編譯原始工程 140
10.8.2 編寫測試程序 140
10.8.3 編譯及下載驗證 142
本章任務 143
本章習題 143
第11章 事件標志組 144
11.1 事件標志組特性 144
11.2 事件標志組原理 144
11.3 事件標志組相關API函數(shù) 145
11.4 實例與代碼解析 155
11.4.1 復制并編譯原始工程 155
11.4.2 編寫測試程序 155
11.4.3 編譯及下載驗證 157
本章任務 158
本章習題 158
第12章 任務通知 159
12.1 任務通知原理 159
12.2 任務通知相關API函數(shù) 160
12.3 任務通知的應用 166
12.4 實例與代碼解析 170
12.4.1 復制并編譯原始工程 170
12.4.2 編寫測試程序 170
12.4.3 編譯及下載驗證 171
本章任務 171
本章習題 171
第13章 軟件定時器 172
13.1 軟件定時器簡介 172
13.1.1 軟件定時器的回調(diào)函數(shù) 172
13.1.2 軟件定時器的模式 172
13.1.3 軟件定時器的狀態(tài) 173
13.2 軟件定時器服務 174
13.2.1 軟件定時器的命令隊列 174
13.2.2 軟件定時器服務調(diào)度 174
13.3 軟件定時器ID 176
13.4 復位軟件定時器 176
13.5 軟件定時器相關API函數(shù) 176
13.6 實例與代碼解析 186
13.6.1 復制并編譯原始工程 186
13.6.2 編寫測試程序 186
13.6.3 編譯及下載驗證 188
本章任務 188
本章習題 188
第14章 內(nèi)存管理 189
14.1 內(nèi)存管理簡介 189
14.2 內(nèi)存管理的應用場景 190
14.3 內(nèi)存碎片 190
14.4 FreeRTOS內(nèi)存管理機制 191
14.5 內(nèi)存管理相關API函數(shù) 192
14.6 實例與代碼解析 193
14.6.1 復制并編譯原始工程 193
14.6.2 編寫測試程序 194
14.6.3 編譯及下載驗證 194
本章任務 195
本章習題 195
第15章 中斷管理 196
15.1 中斷簡介 196
15.2 中斷優(yōu)先級 197
15.3 用于屏蔽中斷的特殊寄存器 197
15.4 FreeRTOS中斷宏 199
15.5 中斷開關 200
15.6 臨界段代碼 201
15.7 實例與代碼解析 202
15.7.1 復制并編譯原始工程 202
15.7.2 完善Timer.c文件 202
15.7.3 編寫測試程序 204
15.7.4 編譯及下載驗證 205
本章任務 206
本章習題 206
第16章 CPU利用率 207
16.1 CPU利用率簡介 207
16.2 CPU利用率統(tǒng)計 207
16.3 CPU利用率相關API函數(shù) 207
16.4 實例與代碼解析 208
16.4.1 復制并編譯原始工程 208
16.4.2 完善FreeRTOSConfig.h文件 208
16.4.3 完善Timer文件對 209
16.4.4 編寫測試程序 210
16.4.5 編譯及下載驗證 211
本章任務 211
本章習題 212
第17章 流緩沖區(qū) 213
17.1 流緩沖區(qū)簡介 213
17.2 流緩沖區(qū)相關API函數(shù) 213
17.3 實例與代碼解析 219
17.3.1 復制并編譯原始工程 219
17.3.2 完善UART0.c文件 219
17.3.3 編寫測試程序 220
17.3.4 編譯及下載驗證 221
本章任務 221
本章習題 221
第18章 消息緩沖區(qū) 222
18.1 消息緩沖區(qū)簡介 222
18.2 消息緩沖區(qū)相關API函數(shù) 222
18.3 實例與代碼解析 227
18.3.1 復制并編譯原始工程 227
18.3.2 編寫測試程序 228
18.3.3 編譯及下載驗證 229
本章任務 229
本章習題 229
第19章 協(xié)程 230
19.1 協(xié)程的基本原理 230
19.2 FreeRTOS協(xié)程 231
19.2.1 FreeRTOS中協(xié)程的狀態(tài) 231
19.2.2 FreeRTOS中協(xié)程的優(yōu)先級 231
19.2.3 FreeRTOS中的協(xié)程函數(shù) 232
19.2.4 FreeRTOS中協(xié)程的調(diào)度 233
19.2.5 FreeRTOS協(xié)程的使用限制 234
19.3 協(xié)程相關API函數(shù) 235
19.4 實例與代碼解析 242
19.4.1 復制并編譯原始工程 242
19.4.2 完善FreeRTOSConfig.h文件 242
19.4.3 編寫測試程序 243
19.4.4 編譯及下載驗證 244
本章任務 245
本章習題 245
參考文獻 246