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