隨著嵌入式系統(tǒng)在各領域的廣泛應用,實時操作系統(tǒng)(RTOS)的需求日益增加。FreeRTOS是一款開源的實時操作系統(tǒng),專為資源受限的嵌入式系統(tǒng)設計。FreeRTOS由Richard Barry創(chuàng)建并維護,提供了強大的任務調度功能,包括優(yōu)先級調度、時間片輪轉和多任務同步機制,如信號量、隊列、事件組和互斥鎖等。FreeRTOS支持多種處理器架構,包括Arm CortexM、PIC、AVR等,具有高度的移植性。
FreeRTOS實時操作系統(tǒng)具備小巧高效的特點,典型內核大小僅有幾千字節(jié)(KB),非常適合用于片上系統(tǒng)(SoC)和微控制器等。FreeRTOS還提供了可選的內存管理方案,以滿足不同應用的需求。同時,其豐富的API和強大的擴展性,使開發(fā)者能夠快速構建穩(wěn)定高效的實時應用。此外,FreeRTOS擁有活躍的社區(qū)支持、豐富的文檔和實例代碼,極大地方便了開發(fā)和調試。FreeRTOS廣泛應用于物聯(lián)網設備、工業(yè)自動化、機器人和消費電子領域,為開發(fā)復雜嵌入式系統(tǒng)提供了強有力的支持。
本書的特點主要體現在以下幾方面。
(1) 系統(tǒng)性和全面性: 本書從FreeRTOS的基本概念入手,逐步深入任務管理、軟件定時器、任務間同步、進程間通信與消息隊列、內存管理、中斷管理以及內核移植等各方面,內容系統(tǒng)全面,覆蓋了FreeRTOS的各個重要方面。
(2) 實用性和操作性: 書中不僅介紹了理論知識,還結合了大量的實際應用實例,幫助讀者在實踐中掌握FreeRTOS的使用方法。每章末尾的習題也有助于讀者鞏固所學知識。
(3) 針對性和專業(yè)性: 本書特別針對STM32嵌入式微控制器進行了詳細介紹和實例講解,適合從事STM32開發(fā)的工程師和開發(fā)人員閱讀。
(4) 圖文并茂: 書中配有大量的圖表和示意圖,幫助讀者更直觀地理解FreeRTOS的工作原理和操作流程。
(5) 循序漸進: 本書內容安排循序漸進,從基礎知識到高級應用,逐步深入,適合不同層次的讀者學習和參考。
(6) 實戰(zhàn)案例: 書中結合了多個實戰(zhàn)案例,詳細講解了FreeRTOS在實際項目中的應用,幫助讀者將理論知識應用到實際開發(fā)中,提高系統(tǒng)開發(fā)效率和產品質量。
全書共分為9章,具體內容如下。
第1章講述了FreeRTOS的特點、商業(yè)許可、發(fā)展歷史及功能等基本概念,解釋了選擇FreeRTOS的理由,并介紹了FreeRTOS源碼和官方手冊的獲取方法,以及系統(tǒng)移植、文件組成、編碼規(guī)則及配置和功能裁剪等內容,最后講解了FreeRTOS的啟動流程。
第2章概述了STM32微控制器,介紹了產品線和選型,詳細分析了STM32F407ZGT6的主要特性和功能,并解釋其芯片內部結構、引腳功能和最小系統(tǒng)設計,同時還討論了STM32的GPIO、外部中斷EXTI、串口USART、定時器等外設及其工作原理。
第3章詳細講述了FreeRTOS的任務管理機制,包括多任務運行基本機制、任務狀態(tài)、優(yōu)先級、空閑任務、基礎時鐘與嘀嗒信號等,還介紹了任務調度方法、任務管理相關函數、任務設計要點以及任務管理的應用實例。
第4章講述了軟件定時器的特性、相關配置、服務任務的優(yōu)先級以及應用場景,討論了軟件定時器的精度、運作機制、控制塊及相關函數,并通過應用實例幫助讀者理解軟件定時器的使用方法。
第5章主要介紹了信號量和互斥量的原理、功能、運作機制、控制塊及相關函數,包括二值信號量、計數信號量、互斥量信號量、遞歸互斥量等。此外,討論了優(yōu)先級翻轉問題及其解決方法,通過應用實例展示了FreeRTOS在任務間同步中的具體應用。
第6章講述了進程間通信的基本概念,詳細講解了消息隊列的特點和操作,包括隊列的創(chuàng)建、數據寫入和讀取方法,以及消息隊列的運作機制、阻塞機制及應用場景。同時,還介紹了消息隊列的控制塊及相關函數,并通過實例說明其應用方法。
第7章講述了內存管理的基本概念及應用場景,介紹了不同的內存管理方案,詳細講解了heap_1.c、heap_2.c、heap_3.c、heap_4.c、heap_5.c等實現方式。同時,解釋了內存池的工作機制和管理方式,通過實例展示了FreeRTOS內存管理的具體應用。
第8章詳細講述了FreeRTOS與中斷的關系、中斷的基本概念及相關名詞,討論了中斷管理的運作機制和應用場景。重點講解了任務與中斷服務例程(ISR)的關系、中斷屏蔽和臨界代碼段的設計原則,并介紹了在ISR中使用FreeRTOS API函數的方法,通過實例展示了中斷管理的應用。
第9章主要講述了FreeRTOS在STM32上的移植實例,涵蓋從STM32 GPIO輸入輸出應用的硬件設計,到使用STM32CubeMX新建工程,通過Keil MDK和STM32CubeIDE實現工程,使用STM32CubeProgrammer下載固件,以及通過STM32CubeIDE進行調試的詳細步驟,系統(tǒng)地展示了整個移植過程。
通過對這9章內容的全面學習,讀者將系統(tǒng)掌握FreeRTOS的運行機制及其在嵌入式系統(tǒng)開發(fā)中的具體應用,從而能夠更加高效地設計和開發(fā)高性能的嵌入式系統(tǒng)。希望本書能夠成為廣大嵌入式系統(tǒng)開發(fā)者和工程師了解和應用FreeRTOS的指南。
本書結合作者多年的科研和教學經驗,遵循循序漸進、理論與實踐并重、共性與個性兼顧的原則,將理論與實踐一體化的教學方式融入其中。書中實例開發(fā)過程用到的是目前使用最廣泛的野火STM32開發(fā)板F407霸天虎,由此開發(fā)各種功能,書中實例均進行了調試。讀者也可以結合實際或者手里現有的開發(fā)板開展實驗,均能獲得實驗結果。
本書數字資源豐富,配有教學課件、程序代碼、教學大綱、電路文件、官方手冊等電子資源。
對本書中所引用的參考文獻的作者,在此一并向他們表示真誠的感謝。由于編者水平有限,加上時間倉促,書中錯誤和不妥之處在所難免,敬請廣大讀者不吝指正。
編者2025年2月
第1章緒論
1.1FreeRTOS系統(tǒng)概述
1.1.1FreeRTOS的特點
1.1.2FreeRTOS的商業(yè)許可
1.1.3選擇FreeRTOS的理由
1.1.4FreeRTOS的發(fā)展歷史
1.1.5FreeRTOS的功能
1.1.6FreeRTOS的一些概念和術語
1.2FreeRTOS的源碼和官方手冊獲取
1.3FreeRTOS系統(tǒng)移植簡介
1.4FreeRTOS的文件組成
1.5FreeRTOS的編碼規(guī)則及配置和功能裁剪
1.6FreeRTOS的啟動流程
第2章STM32嵌入式微控制器
2.1STM32F407ZGT6概述
2.1.1STM32F407的主要特性
2.1.2STM32F407的主要功能
2.2STM32F407ZGT6芯片內部結構
2.3STM32F407VGT6芯片引腳和功能
2.4STM32F407VGT6最小系統(tǒng)設計
2.5STM32通用輸入輸出GPIO
2.5.1STM32 GPIO接口概述
2.5.2STM32的GPIO功能
2.6STM32外部中斷
2.6.1STM32F4中斷系統(tǒng)
2.6.2STM32F4外部中斷/事件控制器
2.7STM32串口USART
2.8STM32定時器
2.8.1STM32F4定時器概述
2.8.2STM32F4基本定時器
2.9STM32外設例程
第3章FreeRTOS任務管理
3.1任務管理概述
3.1.1多任務運行基本機制
3.1.2任務的狀態(tài)
3.1.3任務的優(yōu)先級
3.1.4空閑任務
3.1.5基礎時鐘與嘀嗒信號
3.2FreeRTOS的任務調度
3.2.1任務調度方法概述
3.2.2使用時間片的搶占式調度方法
3.3任務管理的應用場合
3.4任務管理相關函數
3.5FreeRTOS任務的設計要點
3.6FreeRTOS任務管理應用實例
第4章FreeRTOS軟件定時器
4.1軟件定時器概述
4.1.1軟件定時器的特性
4.1.2軟件定時器的相關配置
4.1.3定時器服務任務的優(yōu)先級
4.2軟件定時器應用場景
4.3軟件定時器的精度
4.4軟件定時器的運作機制
4.5軟件定時器控制塊
4.6軟件定時器的相關函數
4.6.1軟件定時器創(chuàng)建函數
4.6.2軟件定時器啟動函數
4.6.3軟件定時器停止函數
4.6.4軟件定時器任務
4.6.5軟件定時器刪除函數
4.7FreeRTOS軟件定時器應用實例
第5章FreeRTOS任務間同步
5.1FreeRTOS信號量
5.1.1二值信號量
5.1.2計數信號量
5.1.3互斥信號量
5.1.4遞歸互斥量
5.1.5信號量應用場景
5.1.6二值信號量運作機制
5.1.7計數信號量運作機制
5.1.8信號量控制塊
5.1.9相關函數
5.1.10FreeRTOS信號量應用實例
5.2FreeRTOS互斥量
5.2.1優(yōu)先級翻轉問題
5.2.2互斥量的工作原理
5.2.3互斥量應用場景
5.2.4互斥量的運作機制
5.2.5互斥量控制塊
5.2.6互斥量函數接口
5.2.7FreeRTOS互斥量應用實例
5.3FreeRTOS事件組
5.3.1事件組的原理和功能
5.3.2事件組的應用場景
5.3.3事件組運作機制
5.3.4事件組控制塊
5.3.5事件組相關函數
5.3.6FreeRTOS事件組應用實例
第6章FreeRTOS進程間通信與消息隊列
6.1進程間通信
6.2隊列的特點和基本操作
6.2.1隊列的特點
6.2.2隊列的基本操作
6.3消息隊列的運作機制
6.4消息隊列的阻塞機制
6.5消息隊列的應用場景
6.5.1任務間的消息交換
6.5.2中斷與任務間的消息傳遞
6.5.3日志系統(tǒng)和事件監(jiān)控
6.6消息隊列控制塊
6.7消息隊列操作相關函數
6.7.1消息隊列創(chuàng)建函數
6.7.2消息隊列靜態(tài)創(chuàng)建函數
6.7.3消息隊列刪除函數
6.7.4向消息隊列發(fā)送消息函數
6.7.5從消息隊列讀取消息函數
6.8FreeRTOS消息隊列應用實例
第7章FreeRTOS內存管理
7.1內存管理的基本概念
7.2內存管理的應用場景
7.3內存管理方案
7.3.1heap_1.c
7.3.2heap_2.c
7.3.3heap_3.c
7.3.4heap_4.c
7.3.5heap_5.c
7.4FreeRTOS內存管理應用實例
第8章FreeRTOS中斷管理
8.1FreeRTOS與中斷
8.2中斷的基本概念
8.3中斷管理的運作機制
8.4中斷管理的應用場景
8.5FreeRTOS中斷管理機制
8.6任務與中斷服務程序
8.6.1任務與中斷服務程序的關系
8.6.2中斷屏蔽和臨界代碼段
8.6.3在ISR中使用FreeRTOS API函數
8.6.4ISR設計原則
8.7FreeRTOS中斷管理應用實例
第9章FreeRTOS在STM32上的移植實例
9.1STM32的GPIO輸入輸出應用硬件設計
9.1.1STM32的GPIO輸入應用硬件設計
9.1.2STM32的GPIO輸出應用硬件設計
9.2STM32Cbue簡介
9.3通過STM32CubeMX新建工程
9.4通過Keil MDK實現工程
9.5通過STM32CubeIDE實現工程
9.6通過STM32CubeProgrammer下載工程
9.7使用STM32CubeIDE調試工程
參考文獻