21.3-啟動(dòng)流程、編碼風(fēng)格(了解)
啟動(dòng)流程
第一種啟動(dòng)流程(我們就使用這個(gè)):
在main函數(shù)中將硬件初始化、RTOS系統(tǒng)初始化,同時(shí)創(chuàng)建所有任務(wù),再啟動(dòng)RTOS調(diào)度器。
第二種啟動(dòng)流程:
在main函數(shù)中將硬件初始化、RTOS系統(tǒng)初始化,只創(chuàng)建一個(gè)啟動(dòng)任務(wù),再啟動(dòng)RTOS調(diào)度器。 之后,在啟動(dòng)任務(wù)中創(chuàng)建各種應(yīng)用任務(wù),當(dāng)所有任務(wù)創(chuàng)建完成,啟動(dòng)任務(wù)把自己刪除。
文件組成和編碼風(fēng)格(了解)
0、文件組成
FreeRTOS文件組成
核心文件
- 包含核心內(nèi)核功能的實(shí)現(xiàn),是 FreeRTOS 的主要組成部分,通常包括:
tasks.c
:實(shí)現(xiàn)任務(wù)管理的核心文件,包含任務(wù)創(chuàng)建、調(diào)度、刪除等核心功能。queue.c
:實(shí)現(xiàn)消息隊(duì)列,用于任務(wù)間的數(shù)據(jù)通信和同步。list.c
:實(shí)現(xiàn)內(nèi)核中的鏈表操作,是任務(wù)調(diào)度和管理的重要數(shù)據(jù)結(jié)構(gòu)。timers.c
:實(shí)現(xiàn)軟件定時(shí)器的創(chuàng)建和管理。event_groups.c
:實(shí)現(xiàn)事件組,用于多任務(wù)間的事件控制和同步。croutine.c
:協(xié)程支持文件(不常用),用于非常小的內(nèi)存占用需求下實(shí)現(xiàn)輕量級(jí)的任務(wù)。
配置文件
- 包括用戶(hù)根據(jù)項(xiàng)目需求調(diào)整的配置項(xiàng):
FreeRTOSConfig.h
:定義系統(tǒng)行為、資源限制等配置項(xiàng)。用戶(hù)可以在這個(gè)文件中設(shè)置堆大小、任務(wù)優(yōu)先級(jí)數(shù)量、時(shí)間片長(zhǎng)度、鉤子函數(shù)等。
硬件抽象層 (HAL) 和移植文件
- 這些文件用來(lái)確保 FreeRTOS 能夠在各種硬件架構(gòu)上運(yùn)行,主要包括:
CMSIS-RTOS 接口文件通常包括:
這些文件里的宏定義、數(shù)據(jù)類(lèi)型、函數(shù)名稱(chēng)等前綴都是"os"。原理上來(lái)說(shuō),這些函數(shù)和數(shù)據(jù)類(lèi)型的名稱(chēng)與具體的RTOS無(wú)關(guān),他們是CMSIS-RTOS標(biāo)準(zhǔn)定義。具體實(shí)現(xiàn),列如前綴"os"的函數(shù)調(diào)用具體移植的RTOS實(shí)現(xiàn)函數(shù),例如,如果移植FreeRTOS,"os"里面的任務(wù)創(chuàng)建函數(shù),調(diào)用的是FreeRTOS的具體任務(wù)創(chuàng)建函數(shù),如果uc/OS-II,"os"函數(shù)就調(diào)用uc/OS-II的具體任務(wù)創(chuàng)建函數(shù)。
- cmsis_os.h
- 這是 CMSIS-RTOS API 的頭文件,定義了 CMSIS-RTOS 所需的所有函數(shù)接口。它包含了任務(wù)管理、定時(shí)器、信號(hào)量、互斥鎖、消息隊(duì)列等操作。通過(guò)這些標(biāo)準(zhǔn)接口,應(yīng)用程序可以不依賴(lài)具體的 RTOS 實(shí)現(xiàn)。
- cmsis_os.c
- 該文件實(shí)現(xiàn)了 CMSIS-RTOS API 中的函數(shù)接口,將這些接口與 FreeRTOS 的內(nèi)核 API 關(guān)聯(lián)起來(lái)。也就是說(shuō),通過(guò)在這個(gè)文件中調(diào)用 FreeRTOS 的 API,cmsis_os.c 能夠使得應(yīng)用程序使用 CMSIS-RTOS API 控制 FreeRTOS。
1、數(shù)據(jù)類(lèi)型
FreeRTOS使用的數(shù)據(jù)類(lèi)型雖然都是標(biāo)準(zhǔn)C的數(shù)據(jù)類(lèi)型,但都進(jìn)行了重定義,取了個(gè)新名字。
char數(shù)據(jù)類(lèi)型可以通過(guò)keil指定了有符號(hào)或者無(wú)符號(hào),默認(rèn)為無(wú)符號(hào)。
2、變量名!!!(值得學(xué)習(xí))
在FreeRTOS中,定義變量時(shí),把變量的類(lèi)型作為前綴,方便用戶(hù)通過(guò)變量即可知道變量的類(lèi)型。
變量名=變量類(lèi)型簡(jiǎn)寫(xiě)+變量的英文意思
比如
char cTemp;
unsigned char ucTemp
unsigned char* pucTemp
char變量的前綴c、short變量的前綴是s、long變量的前綴是l。
其它比如結(jié)構(gòu)體、任務(wù)句柄等是x。
如果是無(wú)符號(hào)類(lèi)型的,前綴再加u;
如果是指針變量,前綴再加p,比如"pc" 表示char * 類(lèi)型
3、函數(shù)名
函數(shù)名包含了函數(shù)返回值的類(lèi)型、函數(shù)所在的文件名以及函數(shù)的功能,如果是私有的函數(shù),還會(huì)加prv前綴。 這種命名方式方便尋找函數(shù)定義并了解函數(shù)作用,值得借鑒。
舉例:
xTaskCreate()函數(shù)的返回值為任務(wù)句柄,在Task.c中定義,作用是創(chuàng)建任務(wù);
vTaskPrioritySet()函數(shù)的返回值為void,在Task.c中定義,作用是設(shè)置優(yōu)先級(jí);
CMSIS-RTOS相關(guān)文件中定義的函數(shù)前綴都是"os",不包括包括返回值類(lèi)型和所在文件的前綴,例如cmsis_os2.h中的函數(shù)osDelay,等
4、宏定義
在FreeRTOS中,宏用大寫(xiě)字母表示,并配有小寫(xiě)字母作為前綴, 前綴用于指示該宏在哪個(gè)頭文件定義。
舉例:
portMAX_DELAY, 位于portable.h;