www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 技術(shù)讓夢(mèng)想更偉大
[導(dǎo)讀]關(guān)注、星標(biāo)公眾號(hào) ,直達(dá)精彩內(nèi)容 1.編碼標(biāo)準(zhǔn) FreeRTOS的核心源代碼遵從MISRA編碼標(biāo)準(zhǔn)指南。這個(gè)標(biāo)準(zhǔn)篇幅稍長(zhǎng),你可以在MISRA官方網(wǎng)站花少量錢(qián)買(mǎi)到,這里不再?gòu)?fù)制任何標(biāo)準(zhǔn)。 「FreeRTOS源代碼不符合MISRA標(biāo)準(zhǔn)的項(xiàng)目如下所示:」 有兩個(gè)API函數(shù)有多個(gè)返回點(diǎn)。


關(guān)注、星標(biāo)公眾號(hào) ,直達(dá)精彩內(nèi)容

1.編碼標(biāo)準(zhǔn)

FreeRTOS的核心源代碼遵從MISRA編碼標(biāo)準(zhǔn)指南。這個(gè)標(biāo)準(zhǔn)篇幅稍長(zhǎng),你可以在MISRA官方網(wǎng)站花少量錢(qián)買(mǎi)到,這里不再?gòu)?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位總線(xiàn),不可避免的使用了指針?biāo)銛?shù)運(yùn)算。MISRA編碼標(biāo)準(zhǔn)強(qiáng)制規(guī)定:指針的算術(shù)運(yùn)算只能用在指向數(shù)組或數(shù)組元素的指針上。
  • 默認(rèn)情況下,跟蹤宏為空語(yǔ)句,因此不符合MISRA的規(guī)定。MISRA編碼標(biāo)準(zhǔn)強(qiáng)制規(guī)定:預(yù)處理指令在句法上應(yīng)該是有意義的。

FreeRTOS可以在很多不同編譯器中編譯,其中的一些編譯器比同類(lèi)有更高級(jí)特性。因?yàn)檫@個(gè)原因,F(xiàn)reeRTOS不使用任何非C語(yǔ)言標(biāo)準(zhǔn)的特性或語(yǔ)法。一個(gè)例外情況是頭文件stdint.h。在文件夾FreeRTOS/Source/include下包含一個(gè)叫做stdint.readme的文件,如果你的編譯器不提供stdint類(lèi)型定義,可以將stdint.readme文件重命名為stdint.h。

2命名規(guī)則

RTOS內(nèi)核和演示例程源代碼使用以下規(guī)則:

1> 變量

  • uint32_t類(lèi)型的變量使用前綴ul,這里’u’表示’unsigned’,’l’表示’long’
  • uint16_t類(lèi)型的變量使用前綴us,這里’u’表示’unsigned’,’s’表示’short’
  • uint8_t類(lèi)型的變量使用前綴uc,這里’u’表示’unsigned’,’c’表示’char’
  • 非stdint類(lèi)型的變量使用前綴x,比如基本的Type_t和TickType_t類(lèi)型,這些類(lèi)型在移植層定義,定義成符合處理器架構(gòu)的最高效類(lèi)型;
  • 非stdint類(lèi)型的無(wú)符號(hào)變量使用前綴ux,比如UbaseType_t(unsigned BaseType_t)
  • size_t類(lèi)型的變量使用前綴x;
  • 枚舉類(lèi)型變量使用前綴e
  • 指針類(lèi)型變量在類(lèi)型基礎(chǔ)上附加前綴p,比如指向uint16_t的指針變量前綴為pus
  • 與MISRA指南一致,char類(lèi)型變量?jī)H被允許保存ASCII字符,前綴為c
  • 與MISRA指南一致,char *類(lèi)型變量?jī)H允許指向ASCII字符串,前綴為pc

2> 函數(shù)

  • 在文件作用域范圍的函數(shù)前綴為prv
  • API函數(shù)的前綴為它們的返回類(lèi)型,當(dāng)返回為空時(shí),前綴為v
  • API函數(shù)名字起始部分為該函數(shù)所在的文件名。比如vTaskDelete函數(shù)定義在tasks.c,并且該函數(shù)返回空。

3> 宏

  • 宏的名字起始部分為該宏定義所在的文件名的一部分。比如configUSE_PREEMPTION定義在FreeRTOSConfig.h文件中。
  • 除了前綴,宏剩下的字母全部為大寫(xiě),兩個(gè)單詞間用下劃線(xiàn)(’_’)隔開(kāi)。

3數(shù)據(jù)類(lèi)型

只有stdint.h和RTOS自己定義的數(shù)據(jù)類(lèi)型可以使用,但也有例外情況,如下所示:

  • char:與MISRA編碼標(biāo)準(zhǔn)指南一致,char類(lèi)型變量?jī)H被允許保存ASCII字符

  • char *:與MISRA編碼標(biāo)準(zhǔn)指南一致,char *類(lèi)型變量?jī)H允許指向ASCII字符串。當(dāng)標(biāo)準(zhǔn)庫(kù)函數(shù)期望一個(gè)char *參數(shù)時(shí),這樣做可以消除一些編譯器警告;特別是考慮到有些編譯器將char類(lèi)型當(dāng)做signed類(lèi)型,還有些編譯器將char類(lèi)型當(dāng)做unsigned類(lèi)型。有三種類(lèi)型會(huì)在移植層定義,它們是:

  • TickType_t:如果configUSE_16_BIT_TICKS為非零(條件為真),TickType_t定義為無(wú)符號(hào)16位類(lèi)型。如果configUSE_16_BIT_TICKS為零(條件為假),TickType_t定義為無(wú)符號(hào)32位類(lèi)型。注:32位架構(gòu)的微處理器應(yīng)設(shè)置configUSE_16_BIT_TICKS為零。

  • BaseType_t:定義為微處理器架構(gòu)效率最高的數(shù)據(jù)類(lèi)型。比如,在32位架構(gòu)處理器上,BaseType_t應(yīng)該定義為32位類(lèi)型。在16位架構(gòu)處理器上,BaseType_t應(yīng)該定義為16位類(lèi)型。如果BaseType_t定義為char,對(duì)于函數(shù)返回值一定要確保使用的是signed char,否則可能造成負(fù)數(shù)錯(cuò)誤。

  • UbaseType_t:這是一個(gè)無(wú)符號(hào)BaseType_t類(lèi)型

4風(fēng)格指南

  • 縮進(jìn):縮進(jìn)使用制表符,一個(gè)制表符等于4個(gè)空格。
  • 注釋?zhuān)鹤⑨寙涡胁怀^(guò)80列,特殊情況除外。不使用C++風(fēng)格的雙斜線(xiàn)(//)注釋
  • 布局:FreeRTOS的源代碼被設(shè)計(jì)成盡可能的易于查看和閱讀。下面的代碼片中,第一部分展示文件布局,第二部分展示C代碼設(shè)計(jì)格式。
/* 首先在這里包含庫(kù)文件... */
#include <stdlib.h>

/* ...然后是FreeRTOS的頭文件... */
#include "FreeRTOS.h"

/* ...緊接著包含其它頭文件. */
#include "HardwareSpecifics.h"

/* 隨后是#defines, 在合理的位置添加括號(hào). */
#define A_DEFINITION ( 1 )

/*
* 隨后是Static (文件內(nèi)部的)函數(shù)原型,
* 如果注釋有多行,參照本條注釋風(fēng)格---每一行都以’*’起始.
*/
static void prvAFunction( uint32_t ulParameter );

/* 文件作用域變量(本文件內(nèi)部使用)緊隨其后,要在函數(shù)體定義之前. */
static BaseType_t xMyVariable.

/* 每一個(gè)函數(shù)的結(jié)束都有一行破折號(hào),破折號(hào)與下面的第一個(gè)函數(shù)之間留一行空白。*/

/*-----------------------------------------------------------*/

void vAFunction( void )
{
/* 函數(shù)體在此定義,注意要用大括號(hào)括住 */
}
/*-----------------------------------------------------------*/

static UBaseType_t prvNextFunction( void )
{
/* 函數(shù)體在此定義. */
}
/*-----------------------------------------------------------*/

/*
* 函數(shù)名字總是占一行,包括返回類(lèi)型。左括號(hào)之前沒(méi)有空格左括號(hào)之后有一個(gè)空格,
* 每個(gè)參數(shù)后面有一個(gè)空格參數(shù)的命名應(yīng)該具有一定的描述性.
*/
void vAnExampleFunction( long lParameter1, unsigned short usParameter2 )
{
/* 變量聲明沒(méi)有縮進(jìn). */
uint8_t ucByte;

/* 代碼要對(duì)齊. 大括號(hào)占獨(dú)自一行. */
for( ucByte = 0U; ucByte < fileBUFFER_LENGTH; ucByte++ )
{
/* 這里再次縮進(jìn). */
}
}

/*
* for、while、do、if結(jié)構(gòu)具有相似的模式。這些關(guān)鍵字和左括號(hào)之間沒(méi)有空格。
* 左括號(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; ucByte < fileBUFFER_LENGTH; ucByte++ )
{
}

while( ucByte < fileBUFFER_LENGTH )
{
}

/*
* 由于運(yùn)算符優(yōu)先級(jí)的復(fù)雜性,我們不能相信自己對(duì)運(yùn)算符優(yōu)先級(jí)時(shí)刻保持警惕
* 并能正確的使用,因此對(duì)于多個(gè)表達(dá)式運(yùn)算時(shí),使用括號(hào)明確優(yōu)先級(jí)順序
*/
if( ( ucByte < fileBUFFER_LENGTH ) && ( ucByte != 0U ) )
{
ulResult = ( ( ulValue1 + ulValue2 ) - ulValue3 ) * ulValue4;
}

/* 條件表達(dá)式也要像其它代碼那樣對(duì)齊。*/
#if( configUSE_TRACE_FACILITY == 1 )
{
/* 向TCB增加一個(gè)用于跟蹤的計(jì)數(shù)器. */
pxNewTCB->uxTCBNumber = uxTaskNumber;
}
#endif

/*方括號(hào)前后各留一個(gè)空格*/
ucBuffer[ 0 ] = 0U;
ucBuffer[ fileBUFFER_LENGTH - 1U ] = 0U;


    

推薦閱讀

(點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)

【編程之美】用C語(yǔ)言實(shí)現(xiàn)狀態(tài)機(jī)(實(shí)用)

【編程之美】超時(shí)重傳,滑動(dòng)窗口,可靠性傳輸原理C語(yǔ)言實(shí)現(xiàn)

【編程之美】論嵌入式架構(gòu)的重要性

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀(guān)點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉