FreeRTOS 內核實現與應用開發實戰指南 — 基於 STM32

劉火良 楊 森 編著

  • 出版商: 機械工業
  • 出版日期: 2019-03-01
  • 定價: $594
  • 售價: 8.5$505
  • 語言: 簡體中文
  • 頁數: 480
  • ISBN: 7111618254
  • ISBN-13: 9787111618256
  • 相關分類: STM32
  • 下單後立即進貨 (約4週~6週)

買這商品的人也買了...

商品描述

全書內容循序漸進,不斷迭代。 在學習時務必做到兩點:一是不能一味地看書,要把代碼和書本結合起來學習,一邊看書, 一邊調試代碼;二是在學完每一章之後,將配套例程重寫一遍,做到舉一反三,真正理解。本書的電子版和配套的源碼均可到野火論壇(www.fireBBS.cn)下載,歡迎各位讀者積極參與交流分享。

本書基於野火STM32全系列開發板介紹FreeRTOS內核實現與應用開發,全書分為兩部分,第一部分先教你如何從0到1把FreeRTOS內核寫出來,從底層的匯編開始講解任務如何定義、如何切換,還講解了阻塞延時如何實現、如何支持多優先級、如何實現任務延時列表以及時間片等FreeRTOS的核心知識點;第二部分講解FreeRTOS內核組件的應用以及使用FreeRTOS進行多任務編程。
本書內容翔實,案例豐富,配有大量示例代碼,適合作為嵌入式領域科技工作者的參考書,也適合相關專業的學生學習參考。

作者簡介

劉火良,野火STM32開發板創辦人,嵌入式軟件工程師,長期從事STM32軟硬件開發,網絡教學《零死角玩STM32》作者,著有《STM32庫開發實戰指南》。

目錄大綱

前 言
引 言
第一部 從0到1教你寫FreeRTOS內核
第1章 初識FreeRTOS 2
1.1 FreeRTOS版權 2
1.2 FreeRTOS收費問題 2
1.2.1 FreeRTOS 2
1.2.2 OpenRTOS 2
1.2.3 SaveRTOS 3
1.3 FreeRTOS資料取得 3
1.3.1 取得原始碼 3
1.3.2 獲取書籍 4
1.3.3 快速入門 4
1.4 FreeRTOS的程式風格 5
1.4.1 資料型態 5
1.4.2 變量名 6
1.4.3 函數名 6
1.4.4 宏 7
1.4.5 格式 7
第2章 新建FreeRTOS工程—軟件模擬 8
2.1 新建本地工程資料夾 8
2.2 使用KEIL新建工程 8
2.2.1 New Project 9
2.2.2 Select Device for Target 9
2.2.3 Manage Run-Time Environment 10
2.3 在KEIL工程中新建檔案組 11
2.4 在KEIL工程中加入文件 11
2.5 調試配置 13
2.5.1 設定軟件模擬 13
2.5.2 修改時鐘大小 13
2.5.3 新增頭檔路徑 13
第3章 裸機系統與多任務系統 15
3.1 裸機系統 15
3.1.1 輪詢系統 15
3.1.2 前後台系統 16
3.2 多任務系統 17
第4章 資料結構—列表與清單項目 20
4.1 C語言鍊錶 20
4.1.1 單向鍊錶 20
4.1.2 雙向鍊錶 22
4.1.3 鍊錶與陣列的比較 22
4.2 FreeRTOS中鍊錶的實作 23
4.2.1 實現鍊錶節點 23
4.2.2 實現鍊錶根節點 25
4.3 鍊錶節點插入實驗 31
4.4 實驗現象 34
第5章 任務的定義與任務切換 35
5.1 本章目標 35
5.2 什麼是任務 36
5.3 創建任務 37
5.3.1 定義任務棧 37
5.3.2 定義任務函數 38
5.3.3 定義任務控制區塊 39
5.3.4 實作任務建立函數 40
5.4 實現就緒清單 45
5.4.1 定義就緒清單 45
5.4.2 就緒清單初始化 45
5.4.3 將任務插入就緒清單 46
5.5 實現調度器 49
5.5.1 啟動調度器 49
5.5.2 任務切換 54
5.6 main()函數 58
5.7 實驗現象 61
5.8 本章涉及的彙編指令 64
第6章 臨界段的保護 65
6.1 什麼是臨界段 65
6.2 Cortex-M核心快速關閉中斷指令 65
6.3 關中斷 66
6.3.1 不帶回傳值的關中斷函數 66
6.3.2 帶傳回值的關中斷函數 67
6.4 開中斷 67
6.5 進入/退出臨界段的宏 68
6.5.1 進入臨界段 68
6.5.2 退出臨界段 69
6.6 臨界段程式碼的應用 70
6.7 實驗現象 71
第7章 空閒任務與阻塞延時 72
7.1 實現空閒任務 72
7.1.1 定義空閒任務的堆疊 72
7.1.2 定義空閒任務的任務控制區塊 73
7.1.3 創建空閒任務 73
7.2 實現阻塞延時 74
7.2.1 vTaskDelay()函數 74
7.2.2 修改vTaskSwitchContext()函數 75
7.3 SysTick中斷服務函數 77
7.4 SysTick初始化函數 78
7.5 main()函數 80
7.6 實驗現象 83
第8章 多優先級 84
8.1 支援多優先級的方法 84
8.2 找出最高優先級的就緒任務相關代碼 85
8.2.1 通用方法 87
8.2.2 最佳化方法 87
8.3 修改程式碼以支援多優先級 89
8.3.1 修改任務控制區塊 89
8.3.2 修改xTaskCreateStatic()函數 89
8.3.3 修改vTaskStartScheduler()函數 93
8.3.4 修改vTaskDelay()函數 94
8.3.5 修改vTaskSwitchContext()函數 95
8.3.6 修改xTaskIncrementTick()函數 96
8.4 main()函數 97
8.5 實驗現象 100
第9章 任務延時清單 102
9.1 任務延時清單的工作原理 102
9.2 實作任務延時清單 103
9.2.1 定義任務延時清單 103
9.2.2 任務延時清單初始化 103
9.2.3 定義xNextTaskUnblock-Time 103
9.2.4 初始化xNextTaskUnblock-Time 104
9.3 修改程式碼以支援任務延時清單 104
9.3.1 修改vTaskDelay()函數 105
9.3.2 修改xTaskIncrementTick()函數 107
9.3.3 修改taskRESET_READY_PRIORITY()函數 109
9.4 main()函數 110
9.5 實驗現象 110
第10章 時間片 111
10.1 時間片測試實驗 111
10.2 main.c檔 112
10.3 實驗現象 115
10.4 原理分析 116
10.4.1 taskSELECT_HIGHEST_PRIORITY_TASK()函數 116
10.4.2 taskRESET_READY_PRIORITY()函數 117
10.5 修改程式碼以支援優先權 118
10.5.1 修改xPortSysTick-Handler()函數 118
10.5.2 修改xTaskIncrement-Tick()函數 119
第二部分 FreeRTOS核心應用開發
第11章 移植FreeRTOS到STM32 124
11.1 取得STM32的裸機工程範本 124
11.2 下載FreeRTOS V9.0.0源碼 124
11.3 FreeRTOS資料夾內容 126
11.3.1 FreeRTOS資料夾 126
11.3.2 FreeRTOS-Plus資料夾 128
11.3.3 HTML文件 129
11.4 在裸機工程中加入FreeRTOS源碼 129
11.4.1 擷取FreeRTOS最簡源碼 129
11.4.2 複製FreeRTOS到裸機工程根目錄 130
11.4.3 複製FreeRTOSConf?ig.h檔案到User資料夾 131
11.4.4 新增FreeRTOS原始碼到工程群組資料夾 131
11.5 修改FreeRTOSConf?ig.h檔 133
11.5.1 FreeRTOSConf?ig.h文件內容 133
11.5.2 修改FreeRTOSConfig.h檔 143
11.6 修改stm32f10x_it.c檔 147
11.7 修改main.c檔 151
11.8 下載驗證 152
第12章 任務 153
12.1 硬件初始化 153
12.2 建立單任務—SRAM靜態內存 155
12.2.1 定義任務函數 155
12.2.2 空閒任務與定時器任務堆疊函數實作 155
12.2.3 定義任務堆疊 157
12.2.4 定義任務控制區塊 157
12.2.5 靜態建立任務 158
12.2.6 啟動任務 159
12.2.7 main.c檔 159
12.3 下載驗證SRAM靜態內存單任務 164
12.4 建立單任務—SRAM動態內存 164
12.4.1 動態內存空間堆的來源 164
12.4.2 定義任務函數 165
12.4.3 定義任務堆疊 166
12.4.4 定義任務控制塊指標 166
12.4.5 動態建立任務 166
12.4.6 啟動任務 167
12.4.7 main.c檔 167
12.5 下載驗證SRAM動態內存單任務 171
12.6 創建多任務—SRAM動態內存 171
12.7 下載驗證SRAM動態內存多任務 175
第13章 FreeRTOS的啟動流程 176
13.1 「?萬事俱備,只欠東風?」法 176
13.2 「?小心翼翼,十分謹慎?」法 177
13.3 兩種方法的適用情況 179
13.4 FreeRTOS的啟動流程 179
13.4.1 建立任務函數xTaskCreate() 179
13.4.2 開啟調度器函數vTask-StartScheduler() 181
13.4.3 main()函數 185
第14章 任務管理 188
14.1 任務的基本概念 188
14.2 任務調度器的基本概念 188
14.3 任務狀態的概念 189
14.4 任務狀態遷移 190
14.5 常用的任務函數 191
14.5.1 任務掛起函數 191
14.5.2 任務恢復函數 195
14.5.3 任務刪除函數 203
14.5.4 任務延時函數 207
14.6 任務的設計要點 215
14.7 任務管理實驗 216
14.8 實驗現象 221
第15章 訊息佇列 222
15.1 訊息佇列的基本概念 222
15.2 訊息佇列的運作機制 222
15.3 訊息隊列的阻塞機制 223
15.4 訊息佇列的應用場景 224
15.5 訊息佇列控制區塊 224
15.6 常用的訊息佇列函數 226
15.6.1 訊息佇列動態建立函數 226
15.6.2 訊息佇列靜態建立函數 232
15.6.3 訊息佇列刪除函數 233
15.6.4 向訊息佇列發送訊息函數 234
15.6.5 從訊息佇列讀取訊息函數 244
15.7 訊息佇列註意事項 251
15.8 訊息佇列實驗 252
15.9 實驗現象 256
第16章 信號量 258
16.1 信號量的基本概念 258
16.1.1 二值信號量 258
16.1.2 計數信號量 259
16.1.3 互斥信號量 259
16.1.4 遞歸信號量 259
16.2 二值信號量的應用場景 260
16.3 二值信號量的運作機制 260
16.4 計數信號量的運作機制 261
16.5 信號量控制塊 262
16.6 常用的信號量函數 263
16.6.1 信號量建立函數 263
16.6.2 信號量刪除函數 268
16.6.3 信號量釋放函數 268
16.6.4 信號量取得函數 271
16.7 信號量實驗 273
16.7.1 二值信號量同步實驗 273
16.7.2 計數信號量實驗 277
16.8 實驗現象 282
16.8.1 二值信號量實驗現象 282
16.8.2 計數信號量實驗現象 283
第17章 互斥量 284
17.1 互斥量的基本概念 284
17.2 互斥量的優先權繼承機制 284
17.3 互斥量的應用情境 287
17.4 互斥量的運作機制 287
17.5 互斥量控制塊 288
17.6 互斥量函數 289
17.6.1 互斥量建立函數xSema-phoreCreateMutex() 289
17.6.2 遞歸互斥量建立函數xSemaphoreCreateRecur-siveMutex() 292
17.6.3 互斥量刪除函數vSema-phoreDelete() 293
17.6.4 互斥量取得函數xSema-phoreTake() 293
17.6.5 遞歸互斥量取得函數xSemaphoreTakeRecur-sive() 299
17.6.6 互斥量釋放函數xSema-phoreGive() 301
17.6.7 遞歸互斥量釋放函數xSemaphoreGiveR