嵌入式系統(tǒng)多任務處理應用開發(fā)實戰(zhàn):基于ARM MCU和FreeRTOS內(nèi)核
定 價:149 元
叢書名:電子與嵌入式系統(tǒng)設計譯叢
- 作者:[英]多根·易卜拉欣(Dogan Ibrahim)
- 出版時間:2023/2/1
- ISBN:9787111718130
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP332
- 頁碼:412
- 紙張:
- 版次:
- 開本:16
本書講述了如何利用FreeRTOS多任務處理內(nèi)核讓ARM Cortex微控制器進行多任務處理。本書還詳細講解了多任務處理操作系統(tǒng)的各項特性,例如:調(diào)度、優(yōu)先級、郵箱、事件標志和信號量等。本書的重要特色之一是使用非常流行的Clicker 2 for STM32開發(fā)板(你可以很輕松地換用其他型號的開發(fā)板)和FreeRTOS進行實時項目實戰(zhàn)。這些項目包括:LED以不同頻率閃爍、7段數(shù)碼管的刷新顯示、用不同任務控制各種傳感器的移動機器人、獨立控制的多個伺服電機、多任務處理的物聯(lián)網(wǎng)項目、具有獨立鍵盤輸入的溫度控制器、具有三項任務(激活、發(fā)生器和顯示)的隨機數(shù)發(fā)生器、家用報警系統(tǒng)以及泊車管理系統(tǒng)等等。
譯者序
前言
致謝
第1章 微型計算機系統(tǒng) / 1
1.1 概述 / 1
1.2 微控制器系統(tǒng) / 1
1.2.1 RAM / 4
1.2.2 ROM / 5
1.2.3 PROM / 5
1.2.4 EPROM / 5
1.2.5 EEPROM / 5
1.2.6 flash EEPROM / 5
1.3 微控制器的特點 / 6
1.3.1 供電電壓 / 6
1.3.2 時鐘 / 6
1.3.3 定時器 / 6
1.3.4 看門狗 / 6
1.3.5 復位輸入 / 7
1.3.6 中斷 / 7
1.3.7 欠電壓檢測器 / 7
1.3.8 模數(shù)轉換器 / 7
1.3.9 串行輸入/輸出 / 7
1.3.10 SPI和I2C / 8
1.3.11 LCD驅動器 / 8
1.3.12 模擬比較器 / 8
1.3.13 實時時鐘 / 8
1.3.14 睡眠模式 / 8
1.3.15 上電復位 / 8
1.3.16 低功率運行 / 9
1.3.17 灌電流/拉電流能力 / 9
1.3.18 USB接口 / 9
1.3.19 CAN接口 / 9
1.3.20 以太網(wǎng)接口 / 9
1.3.21 Wi-Fi和藍牙接口 / 9
1.4 微控制器架構 / 9
1.5 小結 / 10
拓展閱讀 / 10
第2章 ARM微控制器架構 / 11
2.1 概述 / 11
2.2 ARM微控制器 / 11
2.2.1 Cortex-M / 13
2.2.2 Cortex-R / 14
2.2.3 Cortex-A / 14
2.2.4 Cortex-M處理器對比 / 14
2.2.5 Cortex-M 兼容性 / 15
2.2.6 處理器性能測量 / 15
2.3 STM32F407VGT6微控制器 / 16
2.3.1 STM32F407VGT6的基本特點 / 16
2.3.2 內(nèi)部模塊示意圖 / 18
2.3.3 供電 / 20
2.3.4 低功耗模式 / 20
2.3.5 時鐘電路 / 20
2.4 通用輸入和輸出 / 24
2.5 嵌套向量中斷控制器 / 26
2.6 外部中斷控制器 / 26
2.7 定時器 / 26
2.8 模數(shù)轉換器 / 26
2.9 內(nèi)置溫度傳感器 / 27
2.10 數(shù)模轉換器 / 27
2.11 復位 / 27
2.12 電特性 / 27
2.13 小結 / 28
拓展閱讀 / 28
第3章 ARM Cortex微控制器開發(fā)板 / 29
3.1 概述 / 29
3.2 LPC1768 / 29
3.3 STM32 Nucleo系列 / 29
3.4 EasyMx PRO v7 for STM32 / 30
3.5 STM32F4DISCOVERY板 / 31
3.6 mbed應用板 / 31
3.7 EasyMx PRO v7 for Tiva / 32
3.8 MINI-M4 for STM32 / 33
3.9 Clicker 2 for MSP432 / 34
3.10 Tiva EK-TM4C123GXL
LaunchPad / 34
3.11 Fusion for ARM V8 / 35
3.12 Clicker 2 for STM32 / 35
3.13 小結 / 36
拓展閱讀 / 36
第4章 Clicker 2 for STM32開發(fā)板 / 37
4.1 概述 / 37
4.2 Clicker 2 for STM32硬件 / 37
4.2.1 板載LED / 38
4.2.2 板載按鍵開關 / 38
4.2.3 復位開關 / 38
4.2.4 供電 / 39
4.2.5 板載mikroBUS插座 / 39
4.2.6 輸入/輸出引腳 / 40
4.2.7 振蕩器 / 41
4.2.8 板載微控制器編程 / 41
4.3 小結 / 42
拓展閱讀 / 42
第5章 ARM微控制器編程 / 43
5.1 概述 / 43
5.2 支持ARM微控制器的集成開發(fā)
環(huán)境 / 43
5.2.1 EWARM / 43
5.2.2 ARM Mbed / 44
5.2.3 MDK-ARM / 44
5.2.4 TrueStudio for STM32 / 45
5.2.5 System Workbench for
STM32 / 45
5.2.6 mikroC Pro for ARM / 45
5.3 小結 / 46
拓展閱讀 / 46
第6章 使用mikroC Pro for ARM編程 / 47
6.1 概述 / 47
6.2 mikroC Pro for ARM / 47
6.3 通用輸入/輸出庫 / 49
6.3.1 GPIO_Clk_Enable / 49
6.3.2 GPIO_Clk_Disable / 50
6.3.3 GPIO_Config / 50
6.3.4 GPIO_Set_Pin_Mode / 52
6.3.5 GPIO_Digital_Input / 53
6.3.6 GPIO_Digital_Output / 53
6.3.7 GPIO_Analog_Input / 53
6.3.8 GPIO_Alternate_Function_
Enable / 54
6.4 存儲器類型說明符 / 54
6.5 PORT輸入/輸出 / 54
6.6 按位訪問 / 55
6.7 bit數(shù)據(jù)類型 / 55
6.8 中斷和異!/ 55
6.8.1 異!/ 55
6.8.2 中斷服務程序 / 56
6.9 創(chuàng)建新項目 / 57
6.10 仿真 / 64
6.11 調(diào)試 / 66
6.12 其他mikroC IDE工具 / 67
6.12.1 ASCII表 / 67
6.12.2 GLCD位圖編輯器 / 68
6.12.3 HID終端 / 68
6.12.4 中斷助手 / 69
6.12.5 LCD定制字符 / 69
6.12.6 7段編輯器 / 69
6.12.7 UDP終端 / 69
6.12.8 USART終端 / 70
6.12.9 USB HID bootloader / 71
6.12.10 統(tǒng)計 / 71
6.12.11 庫管理器 / 72
6.12.12 編譯列表 / 73
6.12.13 輸出文件 / 73
6.12.14 選項窗口 / 73
6.13 小結 / 74
拓展閱讀 / 74
第7章 多任務處理簡介 / 75
7.1 概述 / 75
7.2 多任務處理內(nèi)核的優(yōu)勢 / 76
7.3 對實時操作系統(tǒng)的需求 / 76
7.4 任務調(diào)度算法 / 77
7.4.1 協(xié)作調(diào)度 / 77
7.4.2 輪詢調(diào)度 / 82
7.4.3 搶占調(diào)度 / 82
7.4.4 調(diào)度算法的目標 / 83
7.4.5 搶占調(diào)度與非搶占調(diào)度之間的
區(qū)別 / 83
7.4.6 其他一些調(diào)度算法 / 84
7.5 調(diào)度算法的選擇 / 85
7.6 小結 / 85
拓展閱讀 / 85
第8章 FreeRTOS簡介 / 86
8.1 概述 / 86
8.2 FreeRTOS發(fā)行版 / 87
8.3 從mikroElektronika網(wǎng)站進行
安裝 / 88
8.4 編寫項目文件 / 89
8.5 FreeRTOS頭文件路徑與源文件
路徑 / 90
8.6 編譯器大小寫敏感 / 91
8.7 編譯模板程序 / 92
8.8 小結 / 92
拓展閱讀 / 92
第9章 使用FreeRTOS函數(shù) / 93
9.1 概述 / 93
9.2 FreeRTOS數(shù)據(jù)類型 / 93
9.3 FreeRTOS變量命名 / 94
9.4 FreeRTOS函數(shù)命名 / 94
9.5 常用宏定義 / 94
9.6 任務狀態(tài) / 94
9.7 與任務相關的函數(shù) / 96
9.7.1 創(chuàng)建新任務 / 96
9.7.2 延遲任務 / 97
9.7.3 項目1—讓LED每秒閃爍
1次 / 97
9.7.4 項目2—讓一個LED每秒閃
爍1次,另一個LED每200ms
閃爍1次 / 100
9.7.5 掛起任務 / 102
9.7.6 讓掛起的任務恢復執(zhí)行 / 102
9.7.7 項目3—掛起和恢復任務 / 103
9.7.8 刪除任務 / 105
9.7.9 項目4—讓LED閃爍并刪除
任務 / 105
9.7.10 獲取任務句柄 / 107
9.7.11 定時執(zhí)行 / 108
9.7.12 滴答計數(shù) / 108
9.7.13 項目5—利用函數(shù)vTask-
DelayUntil()讓LED閃爍 / 108
9.7.14 任務優(yōu)先級 / 110
9.7.15 項目6—讓LED閃爍和切
換不同優(yōu)先級的按鍵開關 / 111
9.7.16 項目7—獲取/設置任務優(yōu)
先級 / 113
9.8 使用液晶顯示屏 / 114
9.8.1 HD44780 LCD模塊 / 115
9.8.2 連接LCD與Clicker 2 for STM32
開發(fā)板 / 116
9.8.3 LCD函數(shù) / 116
9.8.4 項目8—在LCD上
顯示文本 / 117
9.9 任務名稱、任務數(shù)量及滴答計數(shù) / 119
9.10 項目9—在LCD上顯示任務
名稱、任務數(shù)量及滴答計數(shù) / 120
9.11 轉而執(zhí)行另一個優(yōu)先級相同的
任務 / 122
9.12 取消延遲 / 123
9.13 項目10—7段2位多路復用LED
顯示屏計數(shù)器 / 123
9.14 項目11—7段4位多路復用LED
顯示屏計數(shù)器 / 129
9.15 項目12—7段4位多路復用LED
顯示屏事件計數(shù)器 / 135
9.16 項目13—交通燈控制器 / 136
9.17 項目14—改變LED
閃爍頻率 / 144
9.18 項目15—通過USB串口向PC
發(fā)送數(shù)據(jù) / 148
9.19 項目16—用PC鍵盤改變LED
閃爍頻率 / 154
9.20 任務列表 / 156
9.21 項目17—在PC屏幕上顯示
任務列表 / 157
9.22 任務信息 / 159
9.23 項目18—在PC屏幕上顯示
任務信息 / 160
9.24 任務狀態(tài) / 162
9.25 項目19—在PC屏幕上顯示
任務狀態(tài) / 163
9.26 任務參數(shù) / 165
9.27 小結 / 165
拓展閱讀 / 165
第10章 隊列管理 / 166
10.1 全局變量概述 / 166
10.2 為何是隊列 / 166
10.3 創(chuàng)建隊列并利用隊列發(fā)送和接
收數(shù)據(jù) / 167
10.4 項目20—用PC鍵盤改變LED
閃爍頻率 / 169
10.5 刪除隊列、為隊列命名、重置
隊列 / 172
10.6 項目21—使用各種隊列函數(shù) / 173
10.7 其他一些隊列函數(shù) / 175
10.8 項目22—開關式溫度控制器 / 176
10.9 小結 / 185
拓展閱讀 / 185
第11章 信號量和互斥量 / 186
11.1 概述 / 186
11.2 創(chuàng)建二進制信號量和互斥量 / 187
11.3 創(chuàng)建計數(shù)型信號量 / 187
11.4 刪除信號量并獲取信號量計數(shù) / 188
11.5 釋放和占用信號量 / 188
11.6 項目23—向PC發(fā)送內(nèi)部和
外部溫度數(shù)據(jù) / 189
11.7 小結 / 194
拓展閱讀 / 194
第12章 事件組 / 195
12.1 概述 / 195
12.2 事件標志和事件組 / 195
12.3 創(chuàng)建和刪除事件組 / 196
12.4 設置、清除、等待事件組位以及
獲取事件組位 / 196
12.5 項目24—向PC發(fā)送內(nèi)部和外
部溫度數(shù)據(jù) / 198
12.6 項目25—控制LED的閃爍 / 202
12.7 項目26—基于GPS的項目 / 205
12.8 小結 / 212
拓展閱讀 / 212
第13章 軟件定時器 / 213
13.1 概述 / 213
13.2 創(chuàng)建、刪除、啟動、停止和重置
定時器 / 214
13.3 修改和獲取定時器周期 / 216
13.4 定時器名稱和ID / 217
13.5 項目27—反應定時器 / 217
13.6 項目28—生成方波 / 220
13.7 項目29—事件計數(shù)器(例如
頻率計數(shù)器) / 222
13.8 小結 / 225
拓展閱讀 / 225
第14章 一些示例項目 / 226
14.1 概述 / 226
14.2 項目30—生成頻率可調(diào)節(jié)的
方波 / 226
14.3 項目31—掃頻波形發(fā)生器 / 230
14.4 項目32—RGB燈光控制器 / 233
14.5 項目33—帶鍵盤的家庭報警
系統(tǒng) / 236
14.6 項目34—帶蜂鳴器的超聲波
泊車 / 244
14.7 項目35—步進電機項目 / 251
14.8 項目36—與Arduino通信 / 262
14.9 小結 / 267
拓展閱讀 / 267
第15章 空閑任務和空閑任務鉤子 / 268
15.1 概述 / 268
15.2 空閑任務 / 268
15.3 空閑任務鉤子函數(shù) / 268
15.4 項目37—顯示空閑處理器
時間 / 269
15.5 小結 / 271
拓展閱讀 / 271
第16章 任務通知 / 272
16.1 概述 / 272
16.2 xTaskNotifyGive()和uITask-
NotifyTake() / 273
16.3 項目38—收到通知后開始讓
LED閃爍 / 274
16.4 xTaskNotify()和xTask-
NotifyWait() / 276
16.5 項目39—收到通知后以不同的
頻率閃爍 / 277
16.6 xTaskNotifyStateClear()和
xTaskNotifyQuery() / 280
16.7 小結 / 281
拓展閱讀 / 281
第17章 臨界區(qū) / 282
17.1 概述 / 282
17.2 項目40—臨界區(qū)(共享
UART) / 282
17.3 掛起調(diào)度程序 / 287
17.4 項目41—掛起調(diào)度程序 / 287
17.5 小結 / 287
拓展閱讀 / 287
第18章 基于Cortex-M4的微控制器中的
中斷 / 288
18.1 概述 / 288
18.2 通常意義下的中斷 / 288
18.3 STM32F407的中斷 / 289
18.4 項目42—基于事件計數(shù)器的
外部中斷 / 294
18.5 項目43—多個外部中斷 / 297
18.6 內(nèi)部中斷(定時器中斷) / 300
18.7 項目44—利用定時器中斷生成
波形 / 301
18.8 項目45—同時使用外部中斷
與定時器中斷 / 304
18.9 小結 / 306
拓展閱讀 / 306
第19章 在中斷服務程序中調(diào)用Free-
RTOS API函數(shù) / 307
19.1 概述 / 307
19.2 xHigherPriorityTaskWoken參數(shù) / 307
19.3 延遲中斷處理 / 308
19.4 從ISR中調(diào)用任務相關函數(shù) / 308
19.4.1 taskENTER_CRITICAL_FROM_
ISR()和taskEXIT_CRITICAL_
FROM_ISR() / 308
19.4.2 xTaskNotifyFromISR() / 308
19.4.3 xTaskNotifyGiveFromISR() / 309
19.4.4 xTaskResumeFromISR() / 309
19.5 項目46—使用xTaskResu-
meFromISR()函數(shù) / 309
19.6 項目47—延遲中斷處理 / 312
19.7 項目48—使用xTaskNotify-
FromISR()函數(shù) / 314
19.8 從ISR中調(diào)用事件組相關函數(shù) / 317
19.8.1 xEventGroupSetBitsFrom-
ISR() / 317
19.8.2 xEventGroupClearBitsFrom-
ISR() / 317
19.9 項目49—使用xEventGroup-
SetBitsFromISR()函數(shù) / 317
19.10 從ISR中調(diào)用定時器相關
函數(shù) / 320
19.10.1 xTimerStartFromISR() / 320
19.10.2 xTimerStopFromISR() / 320
19.10.3 xTimerResetFromISR() / 321
19.10.4 xTimerChangePeriodFrom-
ISR() / 321
19.11 項目50—使用xTimerStart-
FromISR()和xTimerChange- PeriodFromISR()函數(shù) / 321
19.12 從ISR中調(diào)用信號量相關
函數(shù) / 324
19.12.1 xSemaphoreGiveFrom-
ISR() / 324
19.12.2 xSemaphoreTakeFrom-
ISR() / 324
19.13 項目51—使用xSemaphore-
TakeFromISR()和xSemaphore-
Give()函數(shù) / 325
19.14 從ISR中調(diào)用隊列相關函數(shù) / 327
19.14.1 xQueueReceiveFromISR() / 327
19.14.2 xQueueSendFromISR() / 327
19.15 項目52—使用xQueueSend-
FromISR()和xQueueReceive()
函數(shù) / 327
19.16 小結 / 329
拓展閱讀 / 330
第20章 停車場管理系統(tǒng) / 331
20.1 概述 / 331
20.2 項目53—停車場控制 / 331
拓展閱讀 / 343
第21章 不同城市的時間 / 344
21.1 概述 / 344
21.2 項目54—時間項目 / 344
拓展閱讀 / 351
第22章 移動機器人項目:Buggy / 352
22.1 概述 / 352
22.2 Buggy / 352
22.3 車輪電機 / 354
22.4 燈光 / 357
22.5 項目55—控制Buggy燈光 / 358
22.6 項目56—控制Buggy電機 / 360
22.7 項目57—Buggy避障 / 364
22.8 項目58—遠程控制Buggy / 375
拓展閱讀 / 384
附錄
附錄A 數(shù)字系統(tǒng) / 385
附錄B 程序描述語言 / 403
縮略語 / 410