嵌入式實時操作系統FreeRTOS原理及應用———基于STM32微控制器 ( 簡體 字) |
作者:張超 | 類別:1. -> 電腦組織與體系結構 -> 單晶片 -> STM32 |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 55499 詢問書籍請說出此書號!【有庫存】 NT售價: 245 元 |
出版日:12/1/2021 |
頁數:272 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121424779 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:隨著現代電子技術的不斷發展,嵌入式技術得到了飛速發展,使得嵌入式系統在工業、能源、交通、信息技術、國防等領域得到了越來越廣泛的應用。
早期的嵌入式系統由于受硬件資源限制,不得不采用前后臺系統模式,如今隨著超大規模集成電路成本的極大降低和廣泛應用,特別是采用ARM全新Cortex內核的芯片的出現,帶有嵌入式實時操作系統的軟件設計逐漸成為各類嵌入式應用的主流設計。
FreeRTOS是一個源碼開放的嵌入式實時操作系統,體積小巧,裁剪和移植方便,支持搶占式任務調度,可供免費使用。正是由于具有這些特點,FreeRTOS的社會占有量逐年提高。據EE Times統計,自2015年開始,FreeRTOS的社會占有量就已經居第一位。然而,國內系統介紹FreeRTOS原理及應用的書籍還比較少,特別是尚未見將FreeRTOS應用到實際項目中的相關書籍。
本書首先通過介紹FreeRTOS,從FreeRTOS在STM32微控制器上的移植開始,逐步引導讀者了解FreeRTOS的源碼結構、移植、裁剪和配置。然后介紹FreeRTOS任務基礎、任務調度及任務函數等內容,使讀者進一步了解FreeRTOS的原理、運行和使用方法。接著介紹用于實現任務之間消息傳遞和任務同步的隊列、信號量、事件標志組、任務通知等內容。最后介紹FreeRTOS軟件定時器及內存管理方面的知識。為了讓讀者更好地理解所學知識點,本書在內容編排上采用了邊學邊練的形式,在每個知識點后都有配套的示例程序,可以讓讀者在掌握FreeRTOS相關原理的同時,知道如何去使用它,以及為什么要這樣使用,達到學以致用的目的。
本書最后通過一個智能手表的實際案例,從功能設計、硬件設計、FreeRTOS工程、算法及驅動、任務設計,到任務創建、調度與同步及調試與優化,系統地介紹了如何利用相關硬件及FreeRTOS構建一個典型的嵌入式系統的過程和方法,使讀者對FreeRTOS在實際嵌入式項目中的應用有一個全面、感性的認識。
能令STM32CubeMX與FreeRTOS協同工作而無須編寫硬件初始化代碼是本書的一大特點。無論是示例程序,還是智能手表項目,與硬件相關的初始化代碼全部利用STM32CubeMX自動生成。由于無須用戶編寫硬件初始化代碼,一方面簡化了程序設計,減少出錯率,提高了工作效率;另一方面使示例程序和項目能適應更多芯片的開發板,方便讀者使用與驗證。
本書由張超、趙清艷、普清民共同編寫,由于編者水平有限,書中難免存在不足之處,懇請讀者批評指正。 |
內容簡介:本書面向高職和應用型本科的學生,以及嵌入式產品開發的工程技術人員。以通用的STM32開發板為平臺,運行freeRTOS操作系統的智能手表作教學項目,貫穿書本內容的編寫。全書共分12章,以智能手表項目為主線,系統介紹了嵌入式實時操作系統的概念,freeRTOS任務創建、任務調度、任務同步與消息傳遞,軟件定時器、事件通知等知識。在每個知識點的學習上,均安排有智能手表對應的功能單元,來幫助讀者理解知識點,并掌握其實際應用。項目引領,邊學邊做,學以致用是本書的一大特色。 |
目錄:第1章 嵌入式實時操作系統介紹 1
1.1 嵌入式系統和嵌入式操作系統 1
1.1.1 嵌入式系統的基本概念 1
1.1.2 嵌入式操作系統 2
1.1.3 實時操作系統 2
1.1.4 嵌入式實時操作系統 3
1.2 嵌入式實時操作系統FreeRTOS簡介 5
1.2.1 FreeRTOS的特點 5
1.2.2 FreeRTOS的商業許可 5
1.2.3 選擇FreeRTOS的理由 6
1.3 總結 7
思考與練習 7
第2章 FreeRTOS在STM32微控制器上的移植 8
2.1 文件準備 8
2.1.1 FreeRTOS源碼 9
2.1.2 基礎工程 12
2.2 FreeRTOS移植 15
2.2.1 復制FreeRTOS源碼 15
2.2.2 向工程中添加.c文件 16
2.2.3 配置頭文件包含路徑 17
2.2.4 配置FreeRTOS 17
2.2.5 修改stm32f4xx_it.c文件 19
2.2.6 編譯項目 19
2.3 移植驗證 20
2.3.1 引入FreeRTOS相關頭文件 20
2.3.2 編寫測試任務函數 20
2.3.3 創建測試任務 21
2.3.4 開啟調度器 21
2.3.5 下載測試 22
2.4 添加串口打印功能 22
2.4.1 串口硬件連接 22
2.4.2 初始化串口 23
2.4.3 下載測試 24
2.5 總結 25
思考與練習 25
第3章 FreeRTOS的裁剪和配置 26
3.1 基礎配置 26
3.1.1 configUSE_PREEMPTION 27
3.1.2 configUSE_PORT_OPTIMISED_TASK_SELECTION 27
3.1.3 configCPU_CLOCK_HZ 27
3.1.4 configTICK_RATE_HZ 27
3.1.5 configMAX_PRIORITIES 27
3.1.6 configMINIMAL_STACK_SIZE 27
3.1.7 configTOTAL_HEAP_SIZE 28
3.1.8 configUSE_16_BIT_TICKS 28
3.1.9 configIDLE_SHOULD_YIELD 28
3.1.10 configMAX_TASK_NAME_LEN 28
3.1.11 configUSE_TICKLESS_IDLE 28
3.1.12 關于列隊、信號量和任務通知 29
3.1.13 關于鉤子函數 29
3.2 FreeRTOS中斷配置 29
3.2.1 configPRIO_BITS 29
3.2.2 configLIBRARY_LOWEST_INTERRUPT_PRIORITY 30
3.2.3 configKERNEL_INTERRUPT_PRIORITY 30
3.2.4 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 30
3.2.5 configMAX_SYSCALL_INTERRUPT_PRIORITY 30
3.3 可選API函數配置 31
3.4 其他配置 31
3.4.1 協程相關 31
3.4.2 任務運行信息相關 31
3.4.3 軟件定時器相關 32
3.4.4 斷言 32
3.4.5 中斷服務函數 33
3.5 FreeRTOSConfig.h頭文件參考配置 33
3.6 總結 35
思考與練習 36
第4章 FreeRTOS任務基礎 37
4.1 FreeRTOS任務 37
4.1.1 任務的特性 38
4.1.2 任務的狀態 39
4.1.3 任務的優先級 39
4.1.4 任務堆棧 40
4.1.5 任務控制塊 40
4.1.6 列表和列表項 41
4.2 任務創建和刪除 44
4.2.1 任務函數 45
4.2.2 任務創建和刪除函數 45
4.2.3 用動態內存分配方法創建任務 46
4.2.4 用靜態內存分配方法創建任務 47
4.2.5 任務刪除 48
4.3 任務創建與刪除示例 49
4.3.1 組織代碼 49
4.3.2 編寫LED0任務函數 49
4.3.3 編寫LED1任務函數 50
4.3.4 創建任務 51
4.3.5 修改main.c文件 51
4.3.6 下載測試 53
4.4 總結 53
思考與練習 54
第5章 FreeRTOS任務調度 55
5.1 開啟調度器 55
5.1.1 調度器開啟函數 55
5.1.2 調度器開啟過程 57
5.1.3 啟動第一個任務 57
5.2 任務的掛起和恢復 58
5.2.1 任務的掛起 58
5.2.2 任務的恢復 60
5.2.3 任務掛起和恢復示例 62
5.3 任務的調度 64
5.3.1 FreeRTOS任務切換場合 65
5.3.2 PendSV中斷 66
5.3.3 PendSV中斷服務函數 67
5.3.4 查找下一個要運行的任務 69
5.3.5 FreeRTOS時間片調度 71
5.3.6 時間片調度示例 72
5.3.7 空閑任務 76
5.4 FreeRTOS內核函數 78
5.4.1 臨界段操作函數 79
5.4.2 掛起和恢復調度器函數 80
5.4.3 任務切換函數 81
5.4.4 系統時鐘節拍追加 81
5.4.5 內核函數使用示例 81
5.5 總結 84
思考與練習 84
第6章 FreeRTOS任務函數 85
6.1 延時函數 86
6.1.1 系統時鐘節拍 86
6.1.2 相對延時 86
6.1.3 絕對延時 87
6.1.4 延時函數使用示例 88
6.2 優先級控制 91
6.2.1 獲取任務優先級 91
6.2.2 設置任務優先級 91
6.2.3 改變任務優先級示例 91
6.3 獲取任務狀態信息 96
6.3.1 任務狀態信息獲取函數 96
6.3.2 任務狀態信息獲取示例 98
6.4 統計任務運行時間信息 101
6.4.1 任務運行時間信息統計函數 101
6.4.2 任務運行時間信息統計示例 101
6.5 總結 106
思考與練習 107
第7章 FreeRTOS隊列與消息傳遞 108
7.1 FreeRTOS隊列及其結構 108
7.1.1 FreeRTOS隊列特性 108
7.1.2 隊列結構體 110
7.2 隊列操作 111
7.2.1 隊列創建 111
7.2.2 入隊操作 112
7.2.3 出隊操作 114
7.2.4 其他隊列操作函數 116
7.3 用隊列實現串口守護任務 116
7.3.1 守護任務 116
7.3.2 串口守護任務示例 116
7.4 總結 120
思考與練習 120
第8章 FreeRTOS信號量與任務同步 121
8.1 二值信號量 121
8.1.1 創建二值信號量 122
8.1.2 釋放二值信號量 123
8.1.3 獲取二值信號量 124
8.1.4 用二值信號量進行任務同步 125
8.2 計數信號量 131
8.2.1 創建計數信號量 131
8.2.2 計數信號量的釋放和獲取 131
8.2.3 用計數信號量進行任務同步 131
8.3 互斥信號量 133
8.3.1 創建互斥信號量 135
8.3.2 互斥信號量的釋放和獲取 135
8.3.3 優先級翻轉 136
8.3.4 優先級翻轉示例 136
8.3.5 用互斥信號量抑制優先級翻轉 140
8.4 遞歸互斥信號量 142
8.5 總結 143
思考與練習 143
第9章 FreeRTOS事件標志組 144
9.1 事件標志組 144
9.1.1 創建事件標志組 144
9.1.2 設置事件標志位 145
9.1.3 獲取事件標志組值 146
9.1.4 等待指定的事件標志位 147
9.2 用事件標志組進行任務同步 147
9.2.1 配置FreeRTOS 148
9.2.2 配置定時器 148
9.2.3 任務函數 149
9.2.4 創建任務 151
9.2.5 下載測試 152
9.3 總結 153
思考與練習 153
第10章 FreeRTOS任務通知 154
10.1 發送和獲取任務通知 154
10.1.1 發送任務通知 154
10.1.2 獲取任務通知 156
10.2 任務通知使用 157
10.2.1 用任務通知模擬二值信號量 157
10.2.2 用任務通知模擬事件標志組 160
10.3 總結 163
思考與練習 163
第11章 FreeRTOS軟件定時器 164
11.1 軟件定時器服務任務 164
11.2 軟件定時器操作 165
11.2.1 單次定時與周期定時 165
11.2.2 創建軟件定時器 165
11.2.3 啟動軟件定時器 166
11.2.4 停止軟件定時器 167
11.3 軟件定時器使用示例 168
11.3.1 配置FreeRTOS 169
11.3.2 軟件定時器回調函數 170
11.3.3 任務函數 170
11.3.4 創建軟件定時器和任務 172
11.3.5 下載測試 173
11.4 總結 174
思考與練習 174
第12章 FreeRTOS內存管理 175
12.1 FreeRTOS內存分配方法 175
12.1.1 heap_1.c動態內存管理方法 175
12.1.2 heap_2.c動態內存管理方法 176
12.1.3 heap_3.c動態內存管理方法 176
12.1.4 heap_4.c動態內存管理方法 177
12.1.5 heap_5.c動態內存管理方法 177
12.2 FreeRTOS內存管理示例 177
12.3 總結 180
思考與練習 180
第13章 智能手表FreeRTOS實現 182
13.1 功能設計 182
13.1.1 時間顯示 183
13.1.2 時間設置 184
13.1.3 鬧鐘設置 184
13.1.4 鬧鐘響鈴 184
13.1.5 秒表計時 185
13.1.6 心率測量 185
13.1.7 運動計步 186
13.1.8 硬件信息 186
13.2 硬件設計 187
13.2.1 硬件系統框圖 188
13.2.2 單元電路 188
13.2.3 硬件原理圖 194
13.3 FreeRTOS工程 194
13.3.1 復制并新建FreeRTOS工程 194
13.3.2 智能手表FreeRTOS配置 196
13.3.3 用STM32CubeMX生成初始化代碼 196
13.4 算法及驅動 199
13.4.1 OLED12864模塊 199
13.4.2 AHT10 207
13.4.3 心率測量 210
13.4.4 運動計步 214
13.4.5 藍牙傳輸 223
13.4.6 多功能按鍵 225
13.4.7 實時時鐘 226
13.5 任務設計 227
13.5.1 按鍵任務 227
13.5.2 時間顯示任務 228
13.5.3 時間設置任務 229
13.5.4 鬧鐘設置任務 231
13.5.5 鬧鐘時間檢查任務 233
13.5.6 鬧鐘響鈴任務 234
13.5.7 秒表計時任務 235
13.5.8 心率測量任務 237
13.5.9 計步后臺任務 239
13.5.10 計步顯示任務 239
13.5.11 任務信息獲取任務 241
13.6 任務創建、調度與同步 243
13.6.1 任務創建及調度器開啟 244
13.6.2 搶占式調度提高系統響應性能 247
13.6.3 時間片調度讓任務共享優先級 247
13.6.4 用任務掛起和恢復實現互斥訪問 247
13.6.5 用互斥信號量共享藍牙資源 249
13.6.6 用任務通知同步鬧鐘響鈴任務 249
13.6.7 用隊列共享按鍵功能 250
13.6.8 軟件定時器使用 250
13.7 調試與優化 251
附錄A FreeRTOS編碼和命名規則 254
附錄B 示例程序和項目所使用的編譯環境 256
附錄C 項目實施對開發板的要求 258
附錄D 項目實施所需驅動文件 259
參考文獻 260 |
序: |