FreeRTOS命名及变量规则
初学FreeRTOS的用户对其变量和函数的命名比较迷惑, FreeRTOS的核心源代码遵从MISRA编码标准指南,关于MISRA编码标准,可以查看文章https://wenku.baidu.com/view/5e7b2f4ee518964bcf847c99.html。下面专门做一下介绍:
变量
uint32_t定义的变量都加上前缀ul。u代表unsigned 无符号,l代表long长整型。
uint16_t定义的变量都加上前缀us。u代表unsigned无符号,s代表short短整型。
uint8_t定义的变量都加上前缀uc。u代表unsigned无符号,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使用的数据类型主要分为stdint.h文件中定义的和自己定义的两种。其中char和char *定义的变量要特别注意。
- char:与MISRA编码标准指南一致,char类型变量仅被允许保存ASCII字符
- char *:与MISRA编码标准指南一致,char *类型变量仅允许指向ASCII字符串。当标准库函数期望一个char *参数时,这样做可以消除一些编译器警告;特别是考虑到有些编译器将char类型当做signed类型,还有些编译器将char类型当做unsigned类型。
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型,要