FreeRTOS 的編碼標(biāo)準(zhǔn)
FreeRTOS 核心源碼文件的編寫遵循 MISRA 代碼規(guī)則,同時(shí)支持各種編譯器。但考慮到有些編譯器的性能還比較弱,不支持 C 語言的新標(biāo)準(zhǔn) C99 和 C11 的一些特性和語法,所以 FreeRTOS 的源碼中就沒有引入 C99 和 C11 的新特性,但是有一個(gè)例外,源碼中有用到頭文件 stdint.h(這個(gè)文件是 C99 標(biāo)準(zhǔn)才引入的)。
如果用戶使用的編譯器沒有這個(gè)頭文件的話,可以將 FreeRTOS 源碼文件中,此路徑下
FreeRTOS/Source/include 的一個(gè) stdint.readme 文件修改為 stdint.h 文件后用于這個(gè)編譯器。
?
FreeRTOS 的命名規(guī)則
初學(xué) FreeRTOS 的用戶對(duì)其變量和函數(shù)的命名比較迷惑,下面專門做一下介紹:
◆ 變量
uint32_t 定義的變量都加上前綴 ul。u代表 unsigned 無符號(hào),l 代表 long 長(zhǎng)整型。
?
uint16_t 定義的變量都加上前綴 us。s 代表 short 短整型。
?
uint8_t 定義的變量都加上前綴 uc。c 代表 char 字符型。
?
stdint.h 文件中未定義的變量類型,在定義變量時(shí)需要加上前綴 x,比如 BaseType_t 和 TickType_t 定義的變量。
?
stdint.h 文件中未定義的無符號(hào)變量類型,在定義變量時(shí)要加上前綴 u,比如 UBaseType_t 定義 的變量要加上前綴 ux。
?
size_t 定義的變量也要加上前綴 ux。
?
枚舉變量會(huì)加上前綴 e。
?
指針變量會(huì)加上前綴 p,比如 uint16_t 定義的指針變量會(huì)加上前綴 pus。
?
根據(jù) MISRA 代碼規(guī)則,char 定義的變量只能用于 ASCII 字符,前綴使用 c。
?
根據(jù) MISRA 代碼規(guī)則,char *定義的指針變量只能用于 ASCII 字符串,前綴使用 pc。
?
◆ 函數(shù)
加上了?static 聲明的函數(shù),定義時(shí)要加上前綴 prv,這個(gè)是單詞 private 的縮寫。
?
帶有返回值的函數(shù),根據(jù)返回值的數(shù)據(jù)類型,加上相應(yīng)的前綴,如果沒有返回值,即 void 類型 ,函數(shù)的前綴加上字母 v。
?
根據(jù)文件名,文件中相應(yīng)的函數(shù)定義時(shí)也將文件名加到函數(shù)命名中,比如 tasks.c 文件中函數(shù)vTaskDelete,函數(shù)中的 task 就是文件名中的 task。
?
?
◆ 宏定義
根據(jù)宏定義所在的文件,文件中的宏定義聲明時(shí)也將文件名加到宏定義中,
比如宏定義 configUSE_PREEMPTION 是定義在文件 FreeRTOSConfig.h 里面。宏定義中的 config 就是文 件名中的 config。另外注意,前綴要小寫。
除了前綴,其余部分全部大寫,同時(shí)用下劃線分開
?
?
FreeRTOS 中數(shù)據(jù)類型
FreeRTOS 使用的數(shù)據(jù)類型主要分為 stdint.h 文件中定義的和自己定義的兩種。其中 char 和 char * 定義的變量要特別注意。 FreeRTOS 主要自定義了以下四種數(shù)據(jù)類型:
?
◆ TickType_t
如果用戶使能了宏定義 configUSE_16_BIT_TICKS,那么 TickType_t 定義的就是 16 位無符號(hào)數(shù),如果沒有使能,那么 TickType_t 定義的就是 32 位無符號(hào)數(shù)。
對(duì)于 32 位架構(gòu)的處理器,一定要禁止此 宏定義,即設(shè)置此宏定義數(shù)值為 0 即可。
?
◆ BaseType_t
這個(gè)數(shù)據(jù)類型根據(jù)系統(tǒng)架構(gòu)的位數(shù)而定,對(duì)于 32 位架構(gòu),BaseType_t 定義的是 32 位有符號(hào)數(shù),對(duì) 于 16 位架構(gòu),BaseType_t 定義的是 16 位有符號(hào)數(shù)。
如果 BaseType_t 被定義成了 char 型,要特別注意將其設(shè)置為有符號(hào)數(shù),因?yàn)椴糠趾瘮?shù)的返回值是用負(fù)數(shù)來表示錯(cuò)誤類型。
?
◆ UBaseType_t
這個(gè)數(shù)據(jù)類型是 BaseType_t 類型的有符號(hào)版本。
?
◆ StackType_t
棧變量數(shù)據(jù)類型定義,這個(gè)數(shù)量類型由系統(tǒng)架構(gòu)決定,對(duì)于 16 位系統(tǒng)架構(gòu),StackType_t 定義的是 16 位變量。
對(duì)于 32 位系統(tǒng)架構(gòu),StackType_t 定義的是 32 位變量。
?
?
?