欢迎光临散文网 会员登陆 & 注册

FreeRTOS 的编码标准

2023-07-05 16:51 作者:自闭选手的Z23  | 我要投稿

FreeRTOS 核心源码文件的编写遵循 MISRA 代码规则,同时支持各种编译器。但考虑到有些编译器的性能还比较弱,不支持 C 语言的新标准 C99 和 C11 的一些特性和语法,所以 FreeRTOS 的源码中就没有引入 C99 和 C11 的新特性,但是有一个例外,源码中有用到头文件 stdint.h(这个文件是 C99 标准才引入的)。

如果用户使用的编译器没有这个头文件的话,可以将 FreeRTOS 源码文件中,此路径下

FreeRTOS/Source/include 的一个 stdint.readme 文件修改为 stdint.h 文件后用于这个编译器。

 

FreeRTOS 的命名规则

初学 FreeRTOS 的用户对其变量和函数的命名比较迷惑,下面专门做一下介绍:

◆ 变量

uint32_t 定义的变量都加上前缀 ul。u代表 unsigned 无符号,l 代表 long 长整型。

 

uint16_t 定义的变量都加上前缀 us。s 代表 short 短整型。

 

uint8_t 定义的变量都加上前缀 uc。c 代表 char 字符型。

 

stdint.h 文件中未定义的变量类型,在定义变量时需要加上前缀 x,比如 BaseType_t 和 TickType_t 定义的变量

 

stdint.h 文件中未定义的无符号变量类型,在定义变量时要加上前缀 u,比如 UBaseType_t 定义 的变量要加上前缀 ux

 

size_t 定义的变量也要加上前缀 ux。

 

枚举变量会加上前缀 e

 

指针变量会加上前缀 p,比如 uint16_t 定义的指针变量会加上前缀 pus。

 

根据 MISRA 代码规则,char 定义的变量只能用于 ASCII 字符,前缀使用 c。

 

根据 MISRA 代码规则,char *定义的指针变量只能用于 ASCII 字符串,前缀使用 pc。

 

函数

加上了 static 声明的函数,定义时要加上前缀 prv,这个是单词 private 的缩写。

 

带有返回值的函数根据返回值的数据类型,加上相应的前缀,如果没有返回值,即 void 类型 ,函数的前缀加上字母 v。

 

根据文件名,文件中相应的函数定义时也将文件名加到函数命名中,比如 tasks.c 文件中函数vTaskDelete,函数中的 task 就是文件名中的 task。

 

 

宏定义

根据宏定义所在的文件,文件中的宏定义声明时也将文件名加到宏定义中,

比如宏定义 configUSE_PREEMPTION 是定义在文件 FreeRTOSConfig.h 里面。宏定义中的 config 就是文 件名中的 config。另外注意,前缀要小写

除了前缀,其余部分全部大写,同时用下划线分开

 

 

FreeRTOS 中数据类型

FreeRTOS 使用的数据类型主要分为 stdint.h 文件中定义的和自己定义的两种。其中 char 和 char * 定义的变量要特别注意。 FreeRTOS 主要自定义了以下四种数据类型:

 

◆ TickType_t

如果用户使能了宏定义 configUSE_16_BIT_TICKS,那么 TickType_t 定义的就是 16 位无符号数,如果没有使能,那么 TickType_t 定义的就是 32 位无符号数。

对于 32 位架构的处理器,一定要禁止此 宏定义,即设置此宏定义数值为 0 即可。

 

◆ BaseType_t

这个数据类型根据系统架构的位数而定,对于 32 位架构,BaseType_t 定义的是 32 位有符号数,对 于 16 位架构,BaseType_t 定义的是 16 位有符号数。

如果 BaseType_t 被定义成了 char 型,要特别注意将其设置为有符号数,因为部分函数的返回值是用负数来表示错误类型。

 

◆ UBaseType_t

这个数据类型是 BaseType_t 类型的有符号版本。

 

◆ StackType_t

栈变量数据类型定义,这个数量类型由系统架构决定,对于 16 位系统架构,StackType_t 定义的是 16 位变量。

对于 32 位系统架构,StackType_t 定义的是 32 位变量。

 

 

 


FreeRTOS 的编码标准的评论 (共 条)

分享到微博请遵守国家法律