個(gè)人不是很喜歡FreeRTOS的編程風(fēng)格,但是沒辦法,這里先簡(jiǎn)單總結(jié)一下;
相關(guān)文章
【FreeRTOS實(shí)戰(zhàn)匯總】小白博主的RTOS學(xué)習(xí)實(shí)戰(zhàn)快速進(jìn)階之路(持續(xù)更新)
1 源碼結(jié)構(gòu)
下載或者克隆源碼,可以看到頂層的源碼結(jié)構(gòu)如下圖所示;
FreeRTOS
:實(shí)時(shí)系統(tǒng)的源文件,主要是這部分;FreeRTOS-Plus
:這里主要基于FreeRTOS的demo,比如iot-lib,tcp等等;
下面重點(diǎn)看一下FreeRTOS
,具體如下所示;
- ① portable:是一個(gè)文件夾,里面包括了各個(gè)平臺(tái)移植所需要的文件;
- ② MenMang:內(nèi)存管理的文件,基本包括
heap_1.c
,heap_2.c
,heap_3.c
,heap_4.c
,heap_5.c
,以后再深入了解;
下面是幾個(gè)比較核心的文件,前面有簡(jiǎn)單提到過(guò),簡(jiǎn)單介紹如下:
- list.c 基本的數(shù)據(jù)結(jié)構(gòu),雙鏈表的實(shí)現(xiàn),是很多函數(shù)的底層文件, 使用
FreeRTOS
必須要包含的文件; - tasks.c 任務(wù)塊,任務(wù)調(diào)度,創(chuàng)建,刪除等等接口都在這個(gè)文件中,也是必須要包含的文件;
- queue.c 這個(gè)文件同時(shí)提供消息隊(duì)列和信號(hào)量服務(wù),作為任務(wù)間同步基本離不開它,所以這個(gè)文件幾乎也是必須包含的;
- timers.c 這個(gè)文件提供軟件計(jì)時(shí)器功能。如果需要實(shí)際使用軟件計(jì)時(shí)器的功能,則應(yīng)該將它包括到構(gòu)建工程中;
- event_groups.c 這個(gè)文件提供了事件組功能。如果需要事件組,則需要將它包含到工程中;
- croutine.c 這個(gè)文件實(shí)現(xiàn)
FreeRTOS
協(xié)同例程功能,協(xié)同例程用于非常小的微控制器,現(xiàn)在很少使用,看情況添加;
具體如下所示;
- FreeRTOSConfig.h 這個(gè)文件可以有用戶創(chuàng)建,當(dāng)然在源碼的
demo
路徑下可以找到現(xiàn)成的文件,根據(jù)自己需求配置FreeRTOSConfig.h
的宏定義,從而實(shí)現(xiàn)對(duì)FreeRTOS
的剪裁。
2 數(shù)據(jù)類型
FreeRTOS
的數(shù)據(jù)類型基本上都定義在portmacro.h
文件中,比如在FreeRTOS\Source\portable\RVDS\ARM_CM3
下就可以找到這個(gè)文件;除此之外,FreeRTOS
中還有兩個(gè)特定的數(shù)據(jù)類型;
- BaseType_t 這個(gè)類型被定義為架構(gòu)中最有效的數(shù)據(jù)類型;比如32位體系結(jié)構(gòu)使用
32 bit
數(shù)據(jù)類型/int32_t
,16位架構(gòu)使用16 bit
數(shù)據(jù)類型/int16_t
,8位架構(gòu)上使用8 bit
數(shù)據(jù)類型/int8_t
。 BaseType_t 適用于數(shù)據(jù)范圍比它小的類型的值,所以也適用于pdTRUE
/pdFALSE
類型的布爾值; - TickType_t
FreeRTOS
配置一個(gè)稱為tick interrupt
的定時(shí)中斷;兩次滴答中斷之間的時(shí)間稱為滴答中斷周期;所以tick number
是指定滴答中斷周期的倍數(shù),TickType_t
是用來(lái)保存滴答計(jì)數(shù)值和to的數(shù)據(jù)類型指定時(shí)間。
在32位機(jī)上數(shù)據(jù)類型定義如下所示,和具體的平臺(tái)相關(guān);
3 命名規(guī)則
3.1 常見命名規(guī)則
-
匈牙利命名法:廣泛應(yīng)用于Microsoft Windows這類環(huán)境中;
-
駝峰命名法:近年來(lái)越來(lái)越流行。 駝峰命名法,正如它的名稱所表示的那樣,指的是混合使用大小寫字母來(lái)構(gòu)成標(biāo)識(shí)符的名字。其中第一個(gè)單詞首字母小寫,余下的單詞首字母大寫。 例如:
printEmployeePaychecks();
函數(shù)名中每一個(gè)邏輯斷點(diǎn)都有一個(gè)大寫字母來(lái)標(biāo)記。 -
帕斯卡(Pascal)命名法:與駝峰命名法類似。 只不過(guò)駝峰命名法是第一個(gè)單詞首字母小寫,而帕斯卡命名法則是第一個(gè)單詞首字母大寫。因此這種命名法也有人稱之為“大駝峰命名法”。 例如:
DisplayInfo();
UserName
都是采用了帕斯卡命名法。在C#中,以帕斯卡命名法和駱駝命名法居多。事實(shí)上,很多程序設(shè)計(jì)者在實(shí)際命名時(shí)會(huì)將駝峰命名法和帕斯卡結(jié)合使用,例如變量名采用駝峰命名法,而函數(shù)采用帕斯卡命名法。 -
下劃線命名法: 下劃線法是隨著C語(yǔ)言的出現(xiàn)流行起來(lái)的,在
UNIX/LIUNX
這樣的環(huán)境,以及GNU
代碼中使用非常普遍。^1
3.2 FreeRTOS的規(guī)則
- 變量名 前綴
c
:char
; 前綴s
:int16_t
; 前綴p
:指針變量; 大寫l
:int32_t
; 小寫x
:表示類型為BaseType_t
:其他非標(biāo)準(zhǔn)類型(結(jié)構(gòu)、任務(wù)句柄、隊(duì)列句柄等等);
如果一個(gè)變量是無(wú)符號(hào)的,那么它也以“u”為前綴。如果一個(gè)變量是一個(gè)指針,它也是帶前綴的,例如,類型為uint8_t的變量將前綴為
uc
- 函數(shù)名
FreeRTOS
函數(shù)名的前綴表示它們返回的類型,也包括它們?cè)谄渲卸x的文件;vTaskPrioritySet()
:前綴v
表示返回類型為viod
,Task
表示在tasks.c
中定義;xQueueReceive()
:前綴x
表示返回BaseType_t
類型數(shù)據(jù),Queue
表示該函數(shù)在queue.c
中定義;pvTimerGetTimerID()
:前綴pv
表示返回void類型指針,Timer
表示該函數(shù)在timer.c.
中定義;prv
:前綴prv
表示作用范圍為當(dāng)前的文件;
- 宏定義
FreeRTOS
的大多數(shù)宏都是用大寫字母寫的,并以小寫字母作為前綴來(lái)表示 定義了宏,如下所示;
4 總結(jié)
本文總結(jié)了FreeRTOS源碼結(jié)構(gòu)和數(shù)據(jù)類型,為以后移植系統(tǒng)和源碼閱讀打下一丟丟基礎(chǔ)。