加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

FreeRTOS編碼標(biāo)準(zhǔn)及規(guī)范

09/18 09:29
843
閱讀需 5 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

微信公眾號(hào) | strongerHuang

據(jù)某研究機(jī)構(gòu)統(tǒng)計(jì),目前全球RTOS市場(chǎng)占有率最高的是FreeRTOS,當(dāng)然,統(tǒng)計(jì)的具體方法我們不得而知,但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é)會(huì)(MISRA)提出的C語言開發(fā)標(biāo)準(zhǔn)。其目的是在增進(jìn)嵌入式系統(tǒng)的安全性及可移植性,針對(duì)C++語言也有對(duì)應(yīng)的標(biāo)準(zhǔn)MISRA C++。

因?yàn)?FreeRTOS 使用多種不同的編譯器構(gòu)建,其中不乏相對(duì)高級(jí)的編譯器。因此, FreeRTOS 沒有使用 C99 或其他標(biāo)準(zhǔn),而是采用更加嚴(yán)格的 MISRA C 編碼標(biāo)準(zhǔn)。
由于 FreeRTOS V11.0之前的內(nèi)核版本,采用MISRA C:2004 編碼標(biāo)準(zhǔn),所以使用 PC-Lint 工具進(jìn)行代碼靜態(tài)分析時(shí),可能存在與 MISRA 標(biāo)準(zhǔn)的一些偏差。

FreeRTOS編碼規(guī)范

不同的RTOS有不同的命名規(guī)范,通常來說,公司如果對(duì)代碼質(zhì)量要求高一點(diǎn),公司內(nèi)部都會(huì)有編碼規(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í)大多數(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,但也有個(gè)別除外。比如:

    TickType_tBaseType_tStackType_t......

5、縮進(jìn)

使用四個(gè)空格字符進(jìn)行縮進(jìn)。

6、注釋

通常以 /* */ 方式進(jìn)行注釋,注釋始終不會(huì)超過第 80 列。

由于時(shí)間有限,這里只分享一些主要內(nèi)容,更多編碼規(guī)范,還是需要大家自己閱讀源碼進(jìn)行了解。


其實(shí)你會(huì)發(fā)現(xiàn),雖然不同RTOS之間的編碼規(guī)范不同,但每一款RTOS都會(huì)嚴(yán)格遵循自家的編碼規(guī)范,不但方便自己升級(jí)維護(hù),也方便用戶閱讀源碼。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

作者黃工,從事嵌入式軟件開發(fā)工作8年有余,高級(jí)嵌入式軟件工程師,業(yè)余維護(hù)公眾號(hào)『strongerHuang』,分享嵌入式軟硬件、單片機(jī)、物聯(lián)網(wǎng)等內(nèi)容。