FreeRTOS内核实现与应用之0——编码风格
内容来源于:
1. 刘火良老师的《FreeRTOS内核实现与应用开发实战指南》;
2. 硬汉嵌入式论坛 - Powered by Discuz! 论坛的安富莱_STM32-V5开发板_FreeRTOS教程(V1.1).pdf;
安富莱的文档质量很高,感谢!!!
FreeRTOS命名规则
1. 变量
- 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。 typedef unsigned long UBaseType_t;
- size_t 定义的变量也要加上前缀ux。
x
前缀**:标识 FreeRTOS 自定义类型(如BaseType_t
、TickType_t
),增强可读性和可移植性。- 枚举变量会加上前缀e。
- 指针变量会加上前缀p,比如uint16_t定义的指针变量会加上前缀pus。
- 根据MISRA代码规则,char定义的变量只能用于ASCII字符,前缀使用c。
- 根据MISRA代码规则,char *定义的指针变量只能用于ASCII字符串,前缀使用pc。
前缀与数据类型的对应关系
前缀 | 数据类型 | 典型用途 | 示例 |
---|---|---|---|
x | BaseType_t /自定义类型 | 内核状态标志、返回值、句柄 | xQueue , xTask |
uc | uint8_t | 无符号字符或小整数 | ucPriority |
ul | uint32_t | 计时器、计数器 | ulTimerCount |
pv | void* | 通用指针(动态内存、参数传递) | pvTaskParameter |
px | 结构体指针 | 指向任务、队列等内核对象的指针 | pxReadyTasksList |
2. 函数
- 加上了static声明的函数,定义时要加上前缀prv,这个是单词private的缩写。
- 带有返回值的函数,根据返回值的数据类型,加上相应的前缀,如果没有返回值,即void类型 ,函数的前缀加上字母v。
- 根据文件名,文件中相应的函数定义时也将文件名加到函数命名中,比如tasks.c文件中函数vTaskDelete,函数中的task就是文件名中的task。
3. 宏定义
- 根据宏定义所在的文件,文件中的宏定义声明时也将文件名加到宏定义中,比如宏定义configUSE_PREEMPTION 是定义在文件 FreeRTOSConfig.h里面。宏定义中的config就是文件名中的config。另外注意,前缀要小写。
- 除了前缀,其余部分全部大写,同时用下划线分开。