前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FreeRTOS(四):命名规则

FreeRTOS(四):命名规则

作者头像
Jasonangel
发布2021-12-10 10:36:34
1.9K0
发布2021-12-10 10:36:34
举报

最近在看 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的源代码被设计成尽可能的易于查看和阅读。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式Linux系统开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.FreeRTOS 编码标准
  • 2. 命名规则
    • > 变量
      • > 函数
        • > 宏
        • 3 数据类型
          • TickType_t
            • BaseType_t
              • UBaseType_t
                • StackType_t
                • 4.风格指南
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档