数据类型与代码风格指南

目录

数据类型

变量名

函数名

格式

宏名称

过度类型转换的基本原理


数据类型

FreeRTOS的每个端口都有一个唯一的portmacro.h头文件,显然它是特定于端口的,即与与port.c一样位于FreeRTOS/Source/portable/[compiler]/[architecture]这个目录下,该文件包含(除其他内容外)两种端口特定数据类型的定义: TickType_t和BaseType_t。

下表描述了这些数据类型:

FreeRTOS使用的端口特定的数据类型
使用的宏(macro)或typedef实际类型
TickType_t

FreeRTOS配置了一个被称为滴答中断的周期性中断。

自FreeRTOS应用程序启动以来发生的滴答中断数称为滴答计数。

滴答计数用来作为系统时间的计量标准。

两次滴答中断之间的时间称为滴答周期。时间被指定为滴答周期的倍数。

TickType_t是用于保存滴答计数值和指定时间的数据类型。

TickType_t可以是无符号16位类型,也可以是无符号32位类型,这取决于在FreeRTOSConfig.h中对configUSE_16_BIT_TICKS的设置。如果configUSE_16_BIT_TICKS被设置为1,则TickType_t被定义为uint16_t。如果configUSE_16_BIT_TICKS被设置为0,则TickType_t被定义为uint32_t。

使用16位类型可以极大地提高8位和16位体系结构的效率,但严重限制了可以指定的时间。没有理由在32位体系结构上使用16位类型

BaseType_t

这总是被定义为体系结构中最有效的数据类型。通常,这在32位体系结构上的32位类型,在16位体系结构上的16位类型,在8位体系结构上的8位类型。

BaseType_t通常用于只能取非常有限的值范围的返回类型,以及pdTRUE/pdFALSE类型的布尔类值。

 一些编译器默认将所有没有明确指定符号类型的char变量编译为unsigned类型,而有些编译器编译为signed类型。出于这个原因,FreeRTOS源代码显式地指定了了所有char类型变量中“signed”或“unsigned”的使用,除非该字符用于保存一个ASCII字符,或者char类型的指针用于指向一个字符串。

FreeRTOS从不使用普通的int类型,只使用short和long型。

在keil的开发环境下,默认char是unsigned类型的。但也可以配置为有符号的,配置过程如下:


变量名

在FreeRTOS中变量以其类型作为前缀: ‘c’表示char,‘s’表示int16_t(short),‘l’表示int32_t(long),‘x’表示BaseType_t和任何其他非标准类型(结构、任务句柄、队列句柄等)。这使我们能够一眼看出变量的类型。

如果一个变量为无符号类型,则它会再加一个“u”作为前缀。如果变量是指针,它会再加“p”作为前缀。例如,类型为uint8_t的变量将以“uc”为前缀,类型为指向char的指针变量将以“pc”为前缀。


函数名

函数名中具有其返回的数据类型和定义它的文件名。例如:
  • v Task PrioritySet()返回一个void类型,并且该函数定义在task.c中
  • xQueueReceive()返回一个BaseType_t 类型变量,并且该函数定义在queue.c中
  • pv Timer GetTimerID()返回一个void 指针,并且该函数定义在timer.c中
文件范围(私有)函数以“prv”为前缀。


格式

一个制表符(tab)总是等于4个空格。

宏名称

大多数宏都是用大写字母写的,并用小写字母作为前缀,表示宏的位置。下面提供了一个前缀的列表。
宏前缀
前缀宏定义的位置
port (例如, portMAX_DELAY)
portable.h 或 portmacro.h
task (例如, taskENTER_CRITICAL())
task.h
pd (例如, pdTRUE)
projdefs.h
config (例如, configUSE_PREEMPTION)
FreeRTOSConfig.h
err (例如, errQUEUE_FULL)
projdefs.h

请注意,信号量API几乎完全是作为一组宏编写的,但它遵循函数命名约定,而不是宏命名约定。

下表定义的宏在整个FreeRTOS源代码中都在使用。

常用宏定义
pdTRUE
1
pdFALSE0
0
pdPASS0
1
pdFAIL
0

过度类型转换的基本原理

FreeRTOS 源代码可以使用许多不同的编译器进行编译,所有这些编译器在生成警告的方式和时间上都有所不同。 特别是,不同的编译器希望以不同的方式使用强制转换。 因此,FreeRTOS 源代码包含比正常情况下更多的类型转换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值