1.編碼標(biāo)準(zhǔn)
FreeRTOS的核心源代碼遵從MISRA編碼標(biāo)準(zhǔn)指南。這個(gè)標(biāo)準(zhǔn)篇幅稍長(zhǎng),你可以在MISRA官方網(wǎng)站花少量錢買到,這里不再復(fù)制任何標(biāo)準(zhǔn)。
FreeRTOS源代碼不符合MISRA標(biāo)準(zhǔn)的項(xiàng)目如下所示:
- 有兩個(gè)API函數(shù)有多個(gè)返回點(diǎn)。MISRA編碼標(biāo)準(zhǔn)強(qiáng)制規(guī)定:一個(gè)函數(shù)在其結(jié)尾應(yīng)該有單一的返回點(diǎn)。
- 指針?biāo)銛?shù)運(yùn)算,在創(chuàng)建任務(wù)時(shí),為了兼容8、16、20、24、32位總線,不可避免的使用了指針?biāo)銛?shù)運(yùn)算。MISRA編碼標(biāo)準(zhǔn)強(qiáng)制規(guī)定:指針的算術(shù)運(yùn)算只能用在指向數(shù)組或數(shù)組元素的指針上。
-
默認(rèn)情況下,跟蹤宏為空語句,因此不符合MISRA的規(guī)定。MISRA編碼標(biāo)準(zhǔn)強(qiáng)制規(guī)定:預(yù)處理指令在句法上應(yīng)該是有意義的。
FreeRTOS可以在很多不同編譯器中編譯,其中的一些編譯器比同類有更高級(jí)特性。因?yàn)檫@個(gè)原因,F(xiàn)reeRTOS不使用任何非C語言標(biāo)準(zhǔn)的特性或語法。一個(gè)例外情況是頭文件stdint.h。在文件夾FreeRTOS/Source/include下包含一個(gè)叫做stdint.readme的文件,如果你的編譯器不提供stdint類型定義,可以將stdint.readme文件重命名為stdint.h。
2.命名規(guī)則
RTOS內(nèi)核和演示例程源代碼使用以下規(guī)則: 1> 變量- uint32_t類型的變量使用前綴ul,這里’u’表示’unsigned’,’l’表示’long’
- uint16_t類型的變量使用前綴us,這里’u’表示’unsigned’,’s’表示’short’
- uint8_t類型的變量使用前綴uc,這里’u’表示’unsigned’,’c’表示’char’
- 非stdint類型的變量使用前綴x,比如基本的Type_t和TickType_t類型,這些類型在移植層定義,定義成符合處理器架構(gòu)的最高效類型;
- 非stdint類型的無符號(hào)變量使用前綴ux,比如UbaseType_t(unsigned BaseType_t)
- size_t類型的變量使用前綴x;
- 枚舉類型變量使用前綴e
- 指針類型變量在類型基礎(chǔ)上附加前綴p,比如指向uint16_t的指針變量前綴為pus
- 與MISRA指南一致,char類型變量?jī)H被允許保存ASCII字符,前綴為c
- 與MISRA指南一致,char *類型變量?jī)H允許指向ASCII字符串,前綴為pc 2> 函數(shù)
- 在文件作用域范圍的函數(shù)前綴為prv
- API函數(shù)的前綴為它們的返回類型,當(dāng)返回為空時(shí),前綴為v
- API函數(shù)名字起始部分為該函數(shù)所在的文件名。比如vTaskDelete函數(shù)定義在tasks.c,并且該函數(shù)返回空。 3> 宏
- 宏的名字起始部分為該宏定義所在的文件名的一部分。比如configUSE_PREEMPTION定義在FreeRTOSConfig.h文件中。
- 除了前綴,宏剩下的字母全部為大寫,兩個(gè)單詞間用下劃線(’_’)隔開。
3.數(shù)據(jù)類型
只有stdint.h和RTOS自己定義的數(shù)據(jù)類型可以使用,但也有例外情況,如下所示:- char:與MISRA編碼標(biāo)準(zhǔn)指南一致,char類型變量?jī)H被允許保存ASCII字符
- char :與MISRA編碼標(biāo)準(zhǔn)指南一致,char 類型變量?jī)H允許指向ASCII字符串。當(dāng)標(biāo)準(zhǔn)庫函數(shù)期望一個(gè)char *參數(shù)時(shí),這樣做可以消除一些編譯器警告;特別是考慮到有些編譯器將char類型當(dāng)做signed類型,還有些編譯器將char類型當(dāng)做unsigned類型。有三種類型會(huì)在移植層定義,它們是:
- TickType_t:如果configUSE_16_BIT_TICKS為非零(條件為真),TickType_t定義為無符號(hào)16位類型。如果configUSE_16_BIT_TICKS為零(條件為假),TickType_t定義為無符號(hào)32位類型。注:32位架構(gòu)的微處理器應(yīng)設(shè)置configUSE_16_BIT_TICKS為零。
- BaseType_t:定義為微處理器架構(gòu)效率最高的數(shù)據(jù)類型。比如,在32位架構(gòu)處理器上,BaseType_t應(yīng)該定義為32位類型。在16位架構(gòu)處理器上,BaseType_t應(yīng)該定義為16位類型。如果BaseType_t定義為char,對(duì)于函數(shù)返回值一定要確保使用的是signed char,否則可能造成負(fù)數(shù)錯(cuò)誤。
- UbaseType_t:這是一個(gè)無符號(hào)BaseType_t類型
4.風(fēng)格指南
- 縮進(jìn):縮進(jìn)使用制表符,一個(gè)制表符等于4個(gè)空格。
- 注釋:注釋單行不超過80列,特殊情況除外。不使用C++風(fēng)格的雙斜線(//)注釋
- 布局:FreeRTOS的源代碼被設(shè)計(jì)成盡可能的易于查看和閱讀。下面的代碼片中,第一部分展示文件布局,第二部分展示C代碼設(shè)計(jì)格式。
/*首先在這里包含庫文件...*/
#include
/*...然后是FreeRTOS的頭文件...*/
#include"FreeRTOS.h"
/*...緊接著包含其它頭文件.*/
#include"HardwareSpecifics.h"
/*隨后是#defines,在合理的位置添加括號(hào).*/
#defineA_DEFINITION(1)
/*
*隨后是Static(文件內(nèi)部的)函數(shù)原型,
*如果注釋有多行,參照本條注釋風(fēng)格---每一行都以’*’起始.
*/
staticvoidprvAFunction(uint32_tulParameter);
/*文件作用域變量(本文件內(nèi)部使用)緊隨其后,要在函數(shù)體定義之前.*/
staticBaseType_txMyVariable.
/*每一個(gè)函數(shù)的結(jié)束都有一行破折號(hào),破折號(hào)與下面的第一個(gè)函數(shù)之間留一行空白。*/
/*-----------------------------------------------------------*/
voidvAFunction(void)
{
/*函數(shù)體在此定義,注意要用大括號(hào)括住*/
}
/*-----------------------------------------------------------*/
staticUBaseType_tprvNextFunction(void)
{
/*函數(shù)體在此定義.*/
}
/*-----------------------------------------------------------*/
/*
*函數(shù)名字總是占一行,包括返回類型。左括號(hào)之前沒有空格左括號(hào)之后有一個(gè)空格,
*每個(gè)參數(shù)后面有一個(gè)空格參數(shù)的命名應(yīng)該具有一定的描述性.
*/
voidvAnExampleFunction(longlParameter1,unsignedshortusParameter2)
{
/*變量聲明沒有縮進(jìn).*/
uint8_tucByte;
/*代碼要對(duì)齊.大括號(hào)占獨(dú)自一行.*/
for(ucByte=0U;ucBytefor、while、do、if結(jié)構(gòu)具有相似的模式。這些關(guān)鍵字和左括號(hào)之間沒有空格。
*左括號(hào)之后有一個(gè)空格,右括號(hào)前面也有一個(gè)空格,每個(gè)分號(hào)后面有一個(gè)空格。
*每個(gè)運(yùn)算符的前后各一個(gè)空格。使用圓括號(hào)明確運(yùn)算符的優(yōu)先級(jí)。不允許有0
*以外的數(shù)字(魔鬼數(shù))出現(xiàn),必要時(shí)將這些數(shù)字換成能表示出數(shù)字含義的常量或
*宏定義。
*/
for(ucByte=0U;ucBytewhile(ucByteif((ucByte#if(configUSE_TRACE_FACILITY==1)
{
/*向TCB增加一個(gè)用于跟蹤的計(jì)數(shù)器.*/
pxNewTCB->uxTCBNumber=uxTaskNumber;
}
#endif
/*方括號(hào)前后各留一個(gè)空格*/
ucBuffer[0]=0U;
ucBuffer[fileBUFFER_LENGTH-1U]=0U;
責(zé)任編輯:xj
原文標(biāo)題:FreeRTOS系列第4篇---FreeRTOS編碼標(biāo)準(zhǔn)及風(fēng)格指南
文章出處:【微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
編碼
+關(guān)注
關(guān)注
6文章
1039瀏覽量
56974 -
FreeRTOS
+關(guān)注
關(guān)注
14文章
499瀏覽量
66939
原文標(biāo)題:FreeRTOS系列第4篇---FreeRTOS編碼標(biāo)準(zhǔn)及風(fēng)格指南
文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
風(fēng)華貼片電阻料號(hào)編碼的詳細(xì)解析
風(fēng)華貼片電阻的料號(hào)編碼通常遵循一套系統(tǒng)化的命名規(guī)則,涵蓋了產(chǎn)品類型、封裝尺寸、溫度系數(shù)、阻值、精度、額定功率及包裝方式等關(guān)鍵參數(shù)。以下是對(duì)風(fēng)華貼片電阻料號(hào)編碼的詳細(xì)解析: 一、編碼結(jié)構(gòu)
Linux內(nèi)核編碼風(fēng)格權(quán)威總結(jié):從縮進(jìn)到底層設(shè)計(jì),讓你的代碼更“內(nèi)核味”
作為全球最龐大的開源項(xiàng)目之一,Linux 內(nèi)核的代碼量早已突破千萬行。要讓來自世界各地的開發(fā)者高效協(xié)作,一套統(tǒng)一、嚴(yán)謹(jǐn)?shù)?b class='flag-5'>編碼風(fēng)格必不可少 —— 這不僅是 “代碼顏值” 的要求,更是可讀性、可維護(hù)性的核心保障。
C語言安全編碼指南:MISRA C、CERT C、CWE 與 C Secure 標(biāo)準(zhǔn)對(duì)比與Perforce QAC應(yīng)用詳解
如何編寫真正安全的C語言代碼?指南涵蓋MISRA C、CERT、CWE等國(guó)際安全編碼標(biāo)準(zhǔn)對(duì)比,以及如何借助Perforce QAC自動(dòng)檢測(cè)漏洞。推薦給嵌入式/汽車/工業(yè)軟件的開發(fā)者!
DR1 系列評(píng)估板 PS 端裸機(jī)與 FreeRTOS 開發(fā)案例手冊(cè)
本文為創(chuàng)龍科技DR1 系列評(píng)估板 PS 端裸機(jī)與 FreeRTOS 開發(fā)指南,涵蓋三大核心案例與雙開發(fā)模式實(shí)現(xiàn)。核心內(nèi)容包括 LED 定時(shí)閃爍、按鍵控制 LED 亮滅、串口數(shù)據(jù)回顯功能,詳細(xì)說明工程
國(guó)巨電阻編碼規(guī)則:RC0805FR-07100KL
國(guó)巨電阻編碼規(guī)則通常由多個(gè)部分構(gòu)成,以“RC0805FR-07100KL”為例,其編碼規(guī)則解析如下: 1、系列與類型(RC) :編碼開頭的“
RTOS Crash 問題全維度分析與解決指南
棧大小預(yù)留≥30%余量,堆大小按“最大需求+20%”配置;
中斷優(yōu)先級(jí)低于RTOS內(nèi)核臨界優(yōu)先級(jí)(FreeRTOS:configMAX_SYSCALL_INTERRUPT_PRIORITY)。
編碼
發(fā)表于 12-08 03:56
ucos與freertos哪個(gè)好?
選擇uCOS或FreeRTOS取決于項(xiàng)目的具體需求和資源限制。
FreeRTOS的優(yōu)點(diǎn)包括:
更小的內(nèi)核ROM和RAM占用,特別是在RAM方面,適合資源受限的嵌入式系統(tǒng)。
支持協(xié)程
發(fā)表于 12-05 07:13
FreeRTOS與uC/OS-II如何選擇?
是加分項(xiàng),盡管開源后需確認(rèn))。
你需要高效、無碎片的內(nèi)存管理(內(nèi)存分區(qū)非常適合固定大小對(duì)象)。
你偏好其清晰、結(jié)構(gòu)化的代碼風(fēng)格和文檔。
FreeRTOS 是目前嵌入式領(lǐng)域的絕對(duì)主流和首選, 尤其是在物
發(fā)表于 11-13 07:15
Vishay USB編碼器接口技術(shù)解析與應(yīng)用指南
Vishay/MCB Industrie RAMK/RAME USB編碼器接口是一款設(shè)計(jì)用于Vishay MCB編碼器(AMK和RAME系列,包括霍爾效應(yīng))的電子板。該接口板只需使用隨附的USB
如何選擇適合的SSI編碼器?
如何選擇適合的SSI編碼器?選擇適合的SSI編碼器需要綜合考慮應(yīng)用場(chǎng)景、技術(shù)參數(shù)、環(huán)境適應(yīng)性以及性價(jià)比等因素。以下是根據(jù)工業(yè)自動(dòng)化領(lǐng)域?qū)I(yè)技術(shù)人員需求整理的選型指南:
Jtti防火墻規(guī)則配置指南:從入門到精通的全面解析
在網(wǎng)絡(luò)安全日益重要的今天,防火墻作為企業(yè)網(wǎng)絡(luò)的第一道防線,其規(guī)則配置直接決定了防護(hù)效果。本文將深入解析防火墻規(guī)則配置的核心要點(diǎn),從基礎(chǔ)概念到高級(jí)策略,幫助您構(gòu)建既安全又高效的網(wǎng)絡(luò)防護(hù)體系。我們將重點(diǎn)
貞光科技代理品牌 | 三星電容物料編碼規(guī)則
韓國(guó)三星電子的電容物料編碼規(guī)則采用分段式結(jié)構(gòu),不同位置字符代表特定參數(shù)(如尺寸、容值/阻值、誤差、耐壓等)。貞光科技作為三星電機(jī)的專業(yè)代理商,致力于為客戶提供優(yōu)質(zhì)的車規(guī)級(jí)電容解決方案。以下分類整理
厚聲電阻標(biāo)簽的命名規(guī)則
厚聲電阻標(biāo)簽的命名規(guī)則圍繞尺寸、功率、精度、阻值及包裝等核心參數(shù)展開,采用結(jié)構(gòu)化編碼體系確保信息清晰傳遞。以下是具體規(guī)則解析: 一、尺寸編碼:英制與公制對(duì)照 厚聲電阻采用英制尺寸標(biāo)注,
詳解FreeRTOS與SAFERTOS的區(qū)別
開源免費(fèi)的FreeRTOS由Richard Barry在WHIS工作時(shí)創(chuàng)建,WHIS基于FreeRTOS的功能模型,通過完整的HAZOP分析,確定了功能模型和API中的所有的弱點(diǎn),減輕所有薄弱環(huán)節(jié),并采用IEC 61508 SIL 3的開發(fā)生命周期,重新設(shè)計(jì)實(shí)現(xiàn)了SAFE
2025年村田電感型號(hào)命名規(guī)則深度解析
最新命名邏輯。 一、基礎(chǔ)結(jié)構(gòu)解析 村田電感型號(hào)由 12位字符 組成,遵循“LQ+結(jié)構(gòu)+尺寸+應(yīng)用+類別+電感值+精度+特征+電極+包裝”的編碼規(guī)則。例如,典型型號(hào)“LQH32MN331K23L”可拆解為: LQ :片狀線圈(型號(hào)標(biāo)識(shí)) H :繞線型(鐵氧體磁芯結(jié)構(gòu)
FreeRTOS編碼規(guī)則及風(fēng)格指南
評(píng)論