FreeRTOS實戰:用STM32+SEGGER打造工業級實時嵌入式系統(第2版)
吉姆·尤爾(Jim Yuill)、彭恩·林德(Penn Linder)
- 出版商: 人民郵電
- 出版日期: 2026-09-01
- 定價: $773
- 售價: $772
- 語言: 簡體中文
- 頁數: 347
- ISBN: 711570404X
- ISBN-13: 9787115704047
-
相關分類:
STM32
- 此書翻譯自: Hands-On RTOS with Microcontrollers : Create high-performance, real-time embedded systems using FreeRTOS, STM32 MCUs, and SEGGER debug, 2/e (Paperback)
下單後立即進貨 (約4週~6週)
相關主題
商品描述
隨著嵌入式技術飛速發展,實時操作系統已成為嵌入式產品開發的核心基礎,FreeRTOS憑借輕量化、高可靠性、易用性等優勢,被廣泛應用於各類單片機項目中。在實際開發中,如何合理運用RTOS任務、通信組件、同步機制,結合硬件外設驅動完成系統搭建,並做好內存管控、問題調試,是嵌入式開發人員必須掌握的核心技能。
《FreeRTOS實戰:用STM32+SEGGER打造工業級實時嵌入式系統(第2版)》圍繞FreeRTOS展開全面講解,共分為5個部分。第1部分介紹RTOS、配套開發板與開發工具,講解裸機開發中經典的超級循環結構,為後續學習築牢基礎;第 2 部分聚焦FreeRTOS核心能力,詳解調度器、任務、同步機制與任務間通信相關API;第3部分結合硬件實戰,講解基於FreeRTOS開發UART、USB等外設驅動的方法,演示任務、中斷、DMA的協同使用,並講解松耦合架構設計;第4部分講解FreeRTOS內存管理、多核/多處理器應用以及系統故障排查與調試技巧;第5部分為參考附錄,提供開發工具速查、配套參考資料,以及FreeRTOS項目的創建與安裝方法。
《FreeRTOS實戰:用STM32+SEGGER打造工業級實時嵌入式系統(第2版)》內容由淺入深、理論結合實戰,既適合嵌入式系統入門者從零學習RTOS與FreeRTOS開發,也可供具備一定經驗的嵌入式工程師參考,用於提升FreeRTOS項目開發、驅動設計與系統調試能力。
作者簡介
Jim Yuill(吉姆·尤爾),資深計算機系統工程師,擁有30余年的行業經驗,涉足操作系統開發、網絡安全研發、網絡系統編程及高效教學等多個領域。他持有計算機科學博士學位,博士論文研究方向為網絡安全,其博士論文在業內具有很高的引用量。
Penn Linder(彭恩·林德),現任IVEK公司高級電氣工程師,該公司專註於工業泵與控制器的研發制造。自1995年在賓夕法尼亞州立大學修讀第一門嵌入式控制器課程起,他便對嵌入式系統產生了濃厚的興趣。此後,他始終投身於這一領域,先後在多家企業負責嵌入式系統相關的軟硬件產品設計工作。他參與研發的產品涵蓋照明控制設備、醫療設備及工業自動化設備等。在職業生涯早期,他主要為8位微控制器(MCU)編寫裸機匯編代碼;近年來,則使用C語言與FreeRTOS,為32位ARM Cortex-M系列處理器開發嵌入式軟件。
目錄大綱
第 1 部分 RTOS、開發板與工具簡介
第 1 章 實時系統簡介 ..................... 2
1.1 究竟什麼是“實時”............. 2
1.1.1 時序要求的範圍......... 3
1.1.2 保證實時行為的方法 5
1.2 硬件與軟件在實時系統中的作用........................ 5
1.2.1 純硬件實現................. 5
1.2.2 底層固件實現............. 6
1.2.3 基於 RTOS 的固件..... 6
1.2.4 基於 RTOS 的軟件..... 7
1.2.5 精心設計的操作系統軟件 ....................... 7
1.3 RTOS 的定義 .......................... 8
1.3.1 硬實時系統................. 9
1.3.2 固實時系統................. 9
1.3.3 軟實時系統............... 10
1.4 實際應用中的實時系統....... 10
1.4.1 RTOS 的類型範圍.... 10
1.4.2 本書使用的 RTOS.... 11
1.5 選擇 RTOS ............................ 12
1.6 總結 ........ 13
第 2 章 開發板簡介 ........................ 15
2.1 開發板概述 ........................... 15
2.2 了解開發板的組件 ............... 17
2.2.1 MCU ......................... 17
2.2.2 CPU ........................... 18
2.2.3 MCU 區域的其他組件 ........................... 19
2.2.4 ST-LINK 調試探針 .. 19
2.3.1 MCU 產品系列 ........ 23
2.3.2 MCU 型號命名規則 24
2.3.3 開發板產品系列與型號命名規則 ......... 24
2.4 總結 ........ 25
第 3 章 開發工具介紹 ................... 26
3.1 本書說明與示例程序的使用方法...................... 27
3.2 IDE 與示例程序 ................... 28
3.2.1 STM32CubeIDE 簡介 ............................. 28
3.2.2 STM32CubeIDE 的安裝 ......................... 28
3.2.3 本書示例程序的安裝 ............................. 29
3.2.4 Project Explorer 的使用 .......................... 32
3.2.5 編輯器的使用........... 32
3.2.6 項目的構建............... 33
3.3 J-Link、Ozone 與 SystemView 等調試工具 ..... 33
3.3.1 SEGGER J-Link 的使用 ......................... 34
3.3.2 工具的下載與安裝... 34
3.3.3 將 ST-LINK 轉換為 J-Link ..................... 34
3.3.4 SEGGER Ozone 的使用 ......................... 35
3.3.5 SEGGER SystemView 的使用................ 39
3.4 總結 ........ 42
第 4 章 理解超級循環 ................... 43
4.1 超級循環簡介 ....................... 43
4.1.1 基本的超級循環....... 44
4.1.2 實時系統中的超級循環 ......................... 45
4.2 利用中斷改進超級循環....... 46
4.2.1 中斷簡介................... 46
4.2.2 理解 ISR 與抖動 ...... 47
4.2.3 中斷與超級循環....... 48
4.3 為超級循環添加定時器....... 49
4.3.1 讓定時超級循環進入休眠狀態 ............. 50
4.3.2 利用定時超級循環的特性 ..................... 52
4.3.3 時序相關的性能分析 ............................. 55
4.4 總結 ........ 56
第 5 章 實現超級循環 ................... 57
5.1 超級循環示例程序 ............... 57
5.1.2 示例程序的工作原理 ............................. 58
5.1.3 設計與測試註意事項 ............................. 65
5.1.4 運行示例程序........... 66
5.2 了解系統 API 與硬件特性 .. 67
5.2.1 HAL_DBGMCU_EnableDBGSleepMode ............................. 67
5.2.2 disable_irq ............. 68
5.3 超級循環程序的開發方法... 70
5.3.1 創建超級循環程序... 70
5.3.2 安裝並配置調試器軟件 ......................... 74
5.3.3 構建並運行固件....... 76
5.3.4 使用示波器測量時序 ............................. 76
5.4 總結 ........ 78
第 2 部分 FreeRTOS 調度器、任務與核心 API
第 6 章 理解 RTOS 任務............. 80
6.1 FreeRTOS 調度器與任務:概念概述................ 81
6.1.1 為何需要舍棄單純的超級循環 ............. 81
6.1.2 RTOS 任務與超級循環函數的對比 ...... 82
6.1.3 將超級循環函數轉換為 RTOS 任務 ..... 83
6.2 選擇 FreeRTOS 作為 RTOS . 88
6.3 FreeRTOS 調度器與任務實戰............................ 89
6.3.1 示例程序的理解與使用 ......................... 89
6.3.2 FreeRTOS 的安裝與配置 ....................... 98
6.4 總結 ...... 100
第 7 章 運行 FreeRTOS 調度器 ........................... 101
7.1 創建任務與啟動調度器..... 102
7.1.1 初始化硬件............. 102
7.1.2 定義任務函數......... 102
7.1.3 創建任務................. 105
7.1.4 檢查返回值............. 106
7.1.5 啟動調度器............. 107
7.2 刪除任務 ............................. 108
7.2.1 任務自行刪除......... 108
7.2.2 從其他任務刪除任務 ........................... 108
7.3 代碼實踐 ............................. 109
7.3.1 構建並運行代碼....................... 109
7.3.2 Ozone 的其他功能 . 110
7.3.3 使用 SystemView 分析任務執行 ......... 111
7.4 理解調度器 ......................... 113
7.4.1 理解 FreeRTOS 任務的狀態 ................ 114
7.4.2 空閑任務................. 115
7.4.3 調度器的運行機制與運行時機 ........... 117
7.4.4 調度器架構............. 118
7.5 任務實現與問題排查......... 120
7.5.1 任務內存分配......... 120
7.5.2 內存保護任務的創建 ........................... 121
7.5.3 任務創建方式匯總. 121
7.5.4 優化任務狀態......... 122
7.5.5 任務啟動問題排查. 123
7.6 總結 ...... 125
第 8 章 數據保護與任務同步 .... 126
8.1 運行本章的示例程序......... 126
8.2 信號量—用於任務同步. 128
8.2.1 理解信號量............. 128
8.2.2 使用信號量............. 131
8.3 優先級翻轉—信號量的錯誤使用方式........ 140
8.3.1 理解優先級翻轉..... 140
8.3.2 優先級翻轉示例程序 ........................... 141
8.4 互斥鎖—增強型信號量. 145
8.4.1 理解互斥鎖............. 145
8.4.2 解決優先級翻轉的示例程序 ............... 146
8.4.3 避免互斥鎖獲取超時 ........................... 148
8.5 競態條件—任務未正確同步時引發............ 149
8.5.1 使用互斥鎖和信號量避免競態條件 ... 149
8.5.2 競態條件示例......... 150
8.6 軟件定時器 ......................... 152
8.6.1 理解軟件定時器..... 152
8.6.2 示例程序:一次性定時器與周期性定時器 ...................... 153
8.6.3 軟件定時器使用準則 ........................... 156
8.7 總結 ...... 157
第 9 章 任務間通信...................... 158
9.1 理解 RTOS 隊列 ................. 158
9.1.2 簡單隊列:接收數據項 ....................... 159
9.1.3 滿隊列:發送數據項 ........................... 159
9.1.4 空隊列:接收數據項 ........................... 160
9.1.5 用於任務間通信的隊列 ....................... 161
9.2 通過隊列按值傳遞數據..... 162
9.2.1 按值傳遞 1 字節數據 ........................... 163
9.2.2 按值傳遞復合數據類型 ....................... 165
9.2.3 理解隊列對執行流程的影響 ............... 168
9.2.4 示例的重要說明..... 169
9.3 通過隊列按引用傳遞數據. 170
9.3.1 何時按引用傳遞..... 170
9.3.2 按值傳遞................. 171
9.3.3 按引用傳遞............. 171
9.3.4 重要說明................. 173
9.4 任務通知 ............................. 173
9.4.1 使用任務通知傳遞簡單數據 ............... 174
9.4.2 任務通知的其他操作 ........................... 175
9.4.3 任務通知與隊列的對比 ....................... 175
9.4.4 索引式任務通知..... 176
9.5 總結 ...... 177
第 3 部分 利用 FreeRTOS 構建系統
第 10 章 驅動程序與 ISR .......... 180
10.1 UART 簡介 ....................... 180
10.2 創建輪詢式 UART 驅動程序 ......................... 185
10.2.1 理解示例程序 ..... 185
10.2.2 運行示例程序 ..... 186
10.2.3 性能分析 ............. 187
10.2.4 輪詢式驅動程序的優缺點 ................ 189
10.2.5 輪詢式驅動程序的適用場景 ............ 189
10.3 FreeRTOS 任務與 ISR 的對比 ....................... 190
10.3.1 任務與 ISR 的區別............................ 190
10.3.2 在 ISR 中調用 FreeRTOS API .......... 192
10.3.3 配置用於 FreeRTOS 的中斷 ............. 192
10.4 創建基於 ISR 的驅動程序 ............................. 195
10.4.1 基於隊列的驅動程序 ........................ 195
10.4.3 基於緩沖區的驅動程序 .................... 201
10.4.4 性能分析 ............. 204
10.5 總結 .... 205
第 11 章 更高效的驅動程序與 ISR ....................... 206
11.1 構建基礎的基於 DMA 的驅動程序 .............. 206
11.1.1 DMA 概念介紹... 207
11.1.2 配置 DMA 外設.. 208
11.1.3 啟動 DMA 接收.. 212
11.1.4 基於 DMA 的緩沖區驅動程序......... 213
11.1.5 性能分析 ............. 214
11.2 構建增強型的基於 DMA 的驅動程序 .......... 217
11.2.1 流緩沖區介紹 ..... 217
11.2.2 雙緩沖 DMA 介紹............................. 220
11.2.3 驅動程序的實現 . 221
11.2.4 流緩沖區的優化方案 ........................ 227
11.3 驅動模型的選擇 ............... 228
11.3.1 驅動模型選型的核心問題 ................ 228
11.3.2 驅動模型選型的經驗法則 ................ 231
11.4 選用第三方庫和驅動程序 .............................. 232
11.5 總結 .... 233
第 12 章 在任務間共享硬件外設 ............................ 234
12.1 理解 USB 消息的發送機制 ............................ 235
12.2 使用簡易的 USB API 發送消息..................... 237
12.2.1 理解代碼 ............. 237
12.2.2 運行代碼 ............. 239
12.2.3 代碼分析 ............. 239
12.2.4 代碼改進方案 ..... 240
12.3 基於流緩沖區實現 VCP 驅動 ........................ 241
12.3.1 理解應用程序 ..... 241
12.3.2 理解驅動程序 ..... 242
12.3.3 運行代碼 ............. 245
12.3.4 分析驅動程序 ..... 246
12.4 增強 VCP 驅動以支持多任務調用 ................ 246
12.4.1 理解應用程序 ..... 246
12.4.2 理解驅動程序 ..... 248
12.4.3 性能數據的采集機制 ........................ 256
第 13 章 利用隊列實現松耦合 . 261
13.1 創建命令隊列 ................... 261
13.1.1 LED 的亮度函數 263
13.1.2 確定隊列內容 ..... 264
13.1.3 定義架構 ............. 264
13.1.4 使用代碼 ............. 271
13.2 為新目標重用隊列定義... 272
13.2.1 隊列接口 ............. 273
13.2.2 iPWM 接口 ......... 273
13.3 理解隊列作為接口的作用.............................. 274
13.4 總結 .... 275
第 4 部分 系統設計與故障排除
第 14章 FreeRTOS 內存管理 .............................. 278
14.1 理解內存分配 ................... 278
14.1.1 靜態內存 ............. 279
14.1.2 棧內存 ................. 279
14.1.3 堆內存 ................. 280
14.1.4 堆碎片 ................. 281
14.2 FreeRTOS 原語的靜態分配與動態分配........ 282
14.2.1 動態分配示例 ..... 282
14.2.2 靜態分配示例 ..... 284
14.2.3 完全禁用動態分配 ............................ 285
14.3 FreeRTOS 堆實現............. 286
14.3.1 5 種堆實現 .......... 287
14.3.2 FreeRTOS 堆實現的對比 .................. 287
14.3.3 選擇 FreeRTOS 堆實現 ..................... 288
14.4 替換 malloc 和 free........... 289
14.5 監控棧和堆問題............... 290
14.5.1 監控棧空間 ......... 290
14.5.2 監控堆空間 ......... 292
14.6 使用內存保護單元(MPU) ......................... 292
14.7 總結 .... 293
第 15 章 多處理器與多核系統 . 294
15.1 多核與多處理器系統簡介.............................. 294
15.2.1 異構多核系統 ..... 296
15.2.2 核心間通信 ......... 297
15.2.3 遺留應用擴展 ..... 298
15.2.4 高需求硬實時系統 ............................ 300
15.2.5 同構多核系統 ..... 301
15.3 多處理器系統詳解........... 301
15.3.1 分布式系統 ......... 301
15.3.2 並行開發 ............. 302
15.3.3 設計復用 ............. 303
15.3.4 高可靠性系統 ..... 303
15.4 處理器間通信詳解........... 303
15.4.1 選擇通信介質的考量因素 ................ 304
15.4.2 通信標準 ............. 305
15.5 多核與多處理器系統的選擇.......................... 306
15.5.1 何時使用多核 MCU .......................... 306
15.5.2 何時使用多處理器系統 .................... 307
15.6 總結 .... 307
第 16 章 故障排除技巧與後續步驟........................ 308
16.1 FreeRTOS 通用調試技術. 308
16.1.1 使用斷言 ............. 309
16.1.2 用於分析任務和 ISR 的工具............ 315
16.1.3 內存使用的監控 . 315
16.1.4 棧溢出檢測 ......... 315
16.2 調試工具故障排除........... 316
16.2.1 Ozone 故障排除 ........316
16.2.2 SystemView 故障排除....................... 320
16.3 後續步驟 ........................... 324
第 5 部分 參考資料與 FreeRTOS 安裝說明
附錄 A 工具快速參考 .................. 326
附錄 C 創建 FreeRTOS 項目及安裝 FreeRTOS ......................... 329

