FreeRTOS编码标准与数据类型

FreeRTOS 入门教程拖得时间太久了。最近计划把这个系列更新完,在自己梳理知识的同时,希望能够帮助初学者快速入门,掌握FreeRTOS的基本原理和使用方法。

先前发表的两篇关于FreeRTOS 的文章:

FreeRTOS快速入门-初探系统

FreeRTOS 官方中文版网站上线啦

在对FreeRTOS有个大概的了解之后,我们逐步学习如何使用它。

对于每一款软件产品或者说软件项目,都会有它的编码规范以及其使用的数据类型。

FreeRTOS 核心源码文件的编写遵循 MISRA 代码规则。

作为初学者,为了能够更好地使用 FreeRTOS 进行开发,有必要了解一下它的编码标准和数据类型定义等内容。

命名规则

初学者对 FreeRTOS 的变量和函数的命名比较迷惑,下面介绍一下:

变量名

在 FreeRTOS 中,定义变量的时候往往会把变量的类型当作前缀加在变量上, 这样的好处是让用户一看到这个变量就知道该变量的类型。各个类型名称定义列举如下:

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。

函数

函数名包含了函数返回值的类型、 函数所在的文件名和函数的功能,如果是私有的函数则会加一个 prv(private) 的前缀。加上了 static 声明的函数, 定义时要加上前缀 prv。

特别的, 在函数名中加入了函数所在的文件名, 这大大的帮助了用户提高寻找函数定义的效率和了解函数作用的目的。

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

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

宏定义

宏均是由大写字母表示,并配有小写字母的前缀, 前缀用于表示该宏在哪个头文件定义 。

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

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

数据类型

在 FreeRTOS 中, 使用的数据类型虽然都是标准 C 里面的数据类型,但是针对不同的处理器,对标准 C 的数据类型又进行了重定义,给它们取了一个新的名字。

比如 char 重新定义了一个名字 portCHAR, 这里面的 port 表示接口的意思,就是 FreeRTOS 要移植到这些
处理器上需要这些接口文件来把它们连接在一起。

FreeRTOS 使用的数据类型主要分为 stdint.h 文件中定义的和自己定义的两种。 其中 char 和 char *定义的变量要特别注意。数据类型重定义在 portmacro.h 这个头文件中实现。

FreeRTOS 主要自定义了以下四种数据类型:

  • TickType_t

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

  • BaseType_t

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

  • UBaseType_t

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

  • StackType_t

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

portmacro.h 文件中关于数据类型重定义截图

在这里插入图片描述

OK,内容介绍完毕。感谢阅读,加油~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zsky_01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值