FreeRTOS(四):命名规则

2021-12-10 10:36:34 浏览数 (1)

最近在看 FreeRTOS 的源码,发现其命名规则和 Linux 很不一样,遂写文章记录一下。

在 Windows 程序和单片机程序中,习惯以如下方式命名宏、变量和函数:

代码语言:javascript复制
#define PI 3.1415926 /* 用大写字母代表宏 */ 

int minValue, maxValue; /* 变量:第一个单词全小写,其后单词的第一个字母大写 */ 

void SendData(void); /* 函数:所有单词第一个字母都大写 */

Linux 中以这样命名,用下划线分割:

代码语言:javascript复制
#define PI 3.1415926 

int min_value, max_value; 

void send_data(void);

更多的 Linux 编码风格参看以下文章:

Linux 编码风格总结

但是 FreeRTOS 就很不一样的,一开始感觉很别扭的感觉。

1.FreeRTOS 编码标准

FreeRTOS的核心源代码遵从 MISRA 编码标准指南。MISRA-C全称 Motor Industry Software Reliability Association (汽车工业软件可靠性协会)

FreeRTOS 源代码也有一些是不符合 MISRA 标准的,大家可以去了解一下。

2. 命名规则

RTOS内核和演示例程源代码使用以下规则:

> 变量

uint32_t:前缀 ul,u 表示 unsigned,l 表示 long

uint16_t:前缀 us,s 表示 short

uint8_t:前缀 uc,c 表示 char

非 stdint 类型的变量使用前缀 x,比如基本的 Type_t 和 TickType_t 类型

非 stdint 类型的无符号变量使用前缀 ux,比如 UbaseType_t(unsigned BaseType_t)

size_t 类型的变量使用前缀 x

枚举类型变量使用前缀 e

指针类型变量在类型基础上附加前缀 p,比如指向 uint16_t 的指针变量前缀为 pus

char 类型变量前缀为 c

char * 类型变量前缀为 pc

举例:

代码语言:javascript复制
size_t xQueueSizeInBytes;
uint8_t * pucQueueStorage;
> 函数

在文件作用域范围的函数前缀为 prv(一般定义是 static)

API 函数的前缀为它们的返回类型,当返回为空时,前缀为 v

返回值类型 所在文件 功能名称。比如:

vTaskDelete 该函数返回值为 void 型,定义在 tasks.c,作用是 delete。

vTaskPrioritySet()函数的返回值为 void 型,定义在 tasks.c,函数作用是PrioritySet 设置优先级。

xQueueReceive()函数的返回值为 portBASE_TYPE 型,在 queue.c 这个文件中定义,函数作用是 receive 接收。

vSemaphoreCreateBinary()函数的返回值为 void 型,在 Semaphore.h 这个文件中定义,函数作用是 CreateBinary。

> 宏

宏的名字起始部分为该宏定义所在的文件名的一部分。比如:

configUSE_PREEMPTION 表示定义在 FreeRTOSConfig.h 文件中,作用是 USE_PREEMPTION。

configKERNEL_INTERRUPT_PRIORITY,表示定义在 config 文件中,作用是 KERNEL_INTERRUPT_PRIORITY 内核中断优先级的设置。

除了前缀,宏剩下的字母全部为大写,两个单词间用下划线(’_’)隔开。

3 数据类型

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 位变量。

4.风格指南

缩进:缩进使用制表符,一个制表符等于 4 个空格。

注释:注释单行不超过 80 列,特殊情况除外。不使用 C 风格的双斜线(//)注释

布局:FreeRTOS的源代码被设计成尽可能的易于查看和阅读。

0 人点赞