微信公眾號 | strongerHuang
據(jù)某研究機構(gòu)統(tǒng)計,目前全球RTOS市場占有率最高的是FreeRTOS,當(dāng)然,統(tǒng)計的具體方法我們不得而知,但FreeRTOS的確很活躍。
這里問問大家,你身邊使用 FreeRTOS 的朋友或同事多嗎?
下面給大家分享一下 FreeRTOS 編碼標(biāo)準(zhǔn)及規(guī)范。
FreeRTOS編碼標(biāo)準(zhǔn)
FreeRTOS V11.0之前的內(nèi)核版本,符合MISRA C:2004 編碼標(biāo)準(zhǔn)。但目前最新的FreeRTOS內(nèi)核遵循 MISRA C:2012 編碼標(biāo)準(zhǔn)。
什么是?MISRA C:2012 編碼標(biāo)準(zhǔn)?大家可以參看我之前分享的文章:《MISRA C:2012 又是什么標(biāo)準(zhǔn)?》。
MISRA C是由汽車產(chǎn)業(yè)軟件可靠性協(xié)會(MISRA)提出的C語言開發(fā)標(biāo)準(zhǔn)。其目的是在增進嵌入式系統(tǒng)的安全性及可移植性,針對C++語言也有對應(yīng)的標(biāo)準(zhǔn)MISRA C++。
因為 FreeRTOS 使用多種不同的編譯器構(gòu)建,其中不乏相對高級的編譯器。因此, FreeRTOS 沒有使用 C99 或其他標(biāo)準(zhǔn),而是采用更加嚴格的 MISRA C 編碼標(biāo)準(zhǔn)。
由于 FreeRTOS V11.0之前的內(nèi)核版本,采用MISRA C:2004 編碼標(biāo)準(zhǔn),所以使用 PC-Lint 工具進行代碼靜態(tài)分析時,可能存在與 MISRA 標(biāo)準(zhǔn)的一些偏差。
FreeRTOS編碼規(guī)范
不同的RTOS有不同的命名規(guī)范,通常來說,公司如果對代碼質(zhì)量要求高一點,公司內(nèi)部都會有編碼規(guī)范。
下面是 FreeRTOS 常見的一些編碼規(guī)范。
1、變量
uint8_t 類型變量以 uc 為前綴,其中“u”表示“unsigned” ,“c”表示“char ”。
uint16_t 類型變量以 us 為前綴,其中“u”表示“unsigned” ,“s”表示“short”。
uint32_t 類型變量以 ul 為前綴,其中“u”表示“unsigned” ,“l(fā)”表示“l(fā)ong”。
比如:
static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
static uint32_t ulTotalRunTime = 0UL;
size_t 類型變量以?x 為前綴,比如:
static size_t xFreeBytesRemaining = 0U;
但?size_t?其實大多數(shù)情況被定義為 “unsigned int”,因此,size_t?類型變量也有帶 ux 前綴。
枚舉變量以 e 為前綴。
指針以附加 p 為前綴。
2、函數(shù)
靜態(tài)或私有函數(shù)以 prv 為前綴。比如:
static void prvAddNewTaskToReadyList( TCB_t *pxNewTCB )
API 函數(shù)返回類型為 void 添加前綴 v。比如:
void vApplicationTickHook( void );
3、宏定義
通常以定義宏的文件為前綴,且前綴為小寫。
例如, FreeRTOSConfig.h 中定義。
#define configUSE_PREEMPTION 1
除前綴外,宏定義其他均使用大寫字母書寫,并使用下劃線來分隔單詞。
4、數(shù)據(jù)類型
主要使用 stdint.h 類型和 RTOS 自帶的 typedef,但也有個別除外。比如:
- TickType_tBaseType_tStackType_t......
5、縮進
使用四個空格字符進行縮進。
6、注釋
通常以 /* */ 方式進行注釋,注釋始終不會超過第 80 列。
由于時間有限,這里只分享一些主要內(nèi)容,更多編碼規(guī)范,還是需要大家自己閱讀源碼進行了解。
其實你會發(fā)現(xiàn),雖然不同RTOS之間的編碼規(guī)范不同,但每一款RTOS都會嚴格遵循自家的編碼規(guī)范,不但方便自己升級維護,也方便用戶閱讀源碼。