溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

FreeRTOS編碼標準及風格是什么

發布時間:2022-04-06 15:15:37 來源:億速云 閱讀:182 作者:iii 欄目:開發技術

這篇文章主要介紹了FreeRTOS編碼標準及風格是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇FreeRTOS編碼標準及風格是什么文章都會有所收獲,下面我們一起來看看吧。

1.編碼標準

      FreeRTOS的核心源代碼遵從MISRA編碼標準指南。這個標準篇幅稍長,你可以在MISRA官方網站花少量錢買到,這里不再復制任何標準。

      FreeRTOS源代碼不符合MISRA標準的項目如下所示:

有兩個API函數有多個返回點。MISRA編碼標準強制規定:一個函數在其結尾應該有單一的返回點。

指針算數運算,在創建任務時,為了兼容8、16、20、24、32位總線,不可避免的使用了指針算數運算。MISRA編碼標準強制規定:指針的算術運算只能用在指向數組或數組元素的指針上。

默認情況下,跟蹤宏為空語句,因此不符合MISRA的規定。MISRA編碼標準強制規定:預處理指令在句法上應該是有意義的。

      FreeRTOS可以在很多不同編譯器中編譯,其中的一些編譯器比同類有更高級特性。因為這個原因,FreeRTOS不使用任何非C語言標準的特性或語法。一個例外情況是頭文件stdint.h。在文件夾FreeRTOS/Source/include下包含一個叫做stdint.readme的文件,如果你的編譯器不提供stdint類型定義,可以將stdint.readme文件重命名為stdint.h。

2.命名規則

      RTOS內核和演示例程源代碼使用以下規則:

      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類型,這些類型在移植層定義,定義成符合處理器架構的最高效類型;
非stdint類型的無符號變量使用前綴ux,比如UbaseType_t(unsigned BaseType_t)
size_t類型的變量使用前綴x;
枚舉類型變量使用前綴e
指針類型變量在類型基礎上附加前綴p,比如指向uint16_t的指針變量前綴為pus
與MISRA指南一致,char類型變量僅被允許保存ASCII字符,前綴為c
與MISRA指南一致,char *類型變量僅允許指向ASCII字符串,前綴為pc

      2> 函數

在文件作用域范圍的函數前綴為prvAPI函數的前綴為它們的返回類型,當返回為空時,前綴為vAPI函數名字起始部分為該函數所在的文件名。比如vTaskDelete函數定義在tasks.c,并且該函數返回空。

      3> 宏

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

3數據類型

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

char:與MISRA編碼標準指南一致,char類型變量僅被允許保存ASCII字符char *:與MISRA編碼標準指南一致,char *類型變量僅允許指向ASCII字符串。當標準庫函數期望一個char *參數時,這樣做可以消除一些編譯器警告;特別是考慮到有些編譯器將char類型當做signed類型,還有些編譯器將char類型當做unsigned類型。

      有三種類型會在移植層定義,它們是:

TickType_t:如果configUSE_16_BIT_TICKS為非零(條件為真),TickType_t定義為無符號16位類型。如果configUSE_16_BIT_TICKS為零(條件為假),TickType_t定義為無符號32位類型。注:32位架構的微處理器應設置configUSE_16_BIT_TICKS為零。BaseType_t:定義為微處理器架構效率最高的數據類型。比如,在32位架構處理器上,BaseType_t應該定義為32位類型。在16位架構處理器上,BaseType_t應該定義為16位類型。如果BaseType_t定義為char,對于函數返回值一定要確保使用的是signed char,否則可能造成負數錯誤。UbaseType_t:這是一個無符號BaseType_t類型

3.4風格指南

縮進:縮進使用制表符,一個制表符等于4個空格。注釋:注釋單行不超過80列,特殊情況除外。不使用C++風格的雙斜線(//)注釋布局:FreeRTOS的源代碼被設計成盡可能的易于查看和閱讀。下面的代碼片中,第一部分展示文件布局,第二部分展示C代碼設計格式。

/* 首先在這里包含庫文件... */  #include <stdlib.h>      /* ...然后是FreeRTOS的頭文件... */  #include "FreeRTOS.h"      /* ...緊接著包含其它頭文件. */  #include "HardwareSpecifics.h"     /* 隨后是#defines, 在合理的位置添加括號. */  #define A_DEFINITION    ( 1 )    /*  * 隨后是Static (文件內部的)函數原型,   * 如果注釋有多行,參照本條注釋風格---每一行都以&rsquo;*&rsquo;起始.  */  static void prvAFunction( uint32_t ulParameter );      /* 文件作用域變量(本文件內部使用)緊隨其后,要在函數體定義之前. */  static BaseType_t xMyVariable.    /* 每一個函數的結束都有一行破折號,破折號與下面的第一個函數之間留一行空白。*/     /*-----------------------------------------------------------*/     void vAFunction( void )  {       /* 函數體在此定義,注意要用大括號括住 */  }  /*-----------------------------------------------------------*/     static UBaseType_t prvNextFunction( void )  {       /* 函數體在此定義. */  }  /*-----------------------------------------------------------*/ /* * 函數名字總是占一行,包括返回類型。 左括號之前沒有空格左括號之后有一個空格, * 每個參數后面有一個空格參數的命名應該具有一定的描述性.  */  void vAnExampleFunction( long lParameter1, unsigned short usParameter2 ) {  /* 變量聲明沒有縮進. */  uint8_t ucByte;         /* 代碼要對齊.  大括號占獨自一行. */      for( ucByte = 0U; ucByte < fileBUFFER_LENGTH; ucByte++ )      {           /* 這里再次縮進. */      }  }    /*  * for、while、do、if結構具有相似的模式。這些關鍵字和左括號之間沒有空格。 * 左括號之后有一個空格,右括號前面也有一個空格,每個分號后面有一個空格。 * 每個運算符的前后各一個空格。使用圓括號明確運算符的優先級。不允許有0 * 以外的數字(魔鬼數)出現,必要時將這些數字換成能表示出數字含義的常量或 * 宏定義。 */  for( ucByte = 0U; ucByte < fileBUFFER_LENGTH; ucByte++ )  {  }   while( ucByte < fileBUFFER_LENGTH )  {  }     /*  * 由于運算符優先級的復雜性,我們不能相信自己對運算符優先級時刻保持警惕 * 并能正確的使用,因此對于多個表達式運算時,使用括號明確優先級順序  */  if( ( ucByte < fileBUFFER_LENGTH ) && ( ucByte != 0U ) )  {      ulResult = ( ( ulValue1 + ulValue2 ) - ulValue3 ) * ulValue4;  }   /* 條件表達式也要像其它代碼那樣對齊。 */  #if( configUSE_TRACE_FACILITY == 1 )  {       /* 向TCB增加一個用于跟蹤的計數器. */       pxNewTCB->uxTCBNumber = uxTaskNumber;  }  #endif    /*方括號前后各留一個空格*/  ucBuffer[ 0 ] = 0U;  ucBuffer[ fileBUFFER_LENGTH - 1U ] = 0U;

關于“FreeRTOS編碼標準及風格是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“FreeRTOS編碼標準及風格是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女