FreeRTOS实时内核应用指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 数据类型和编码风格指南

数据类型

每种FreeRTOS移植都有一个独特的portmacro.h头文件,其中包含两个与移植相关的数据类型定义:TickType_t和BaseType_t。对这些数据类型的详细描述如表1-2所示。

表1-2 FreeRTOS使用的与移植相关的数据类型

一些编译器将所有非限定的char变量作为无符号型处理,而其他编译器则将其作为有符号型处理。出于这个原因,FreeRTOS源代码明确地限定了char变量的使用,用signed或unsigned,除非char变量用来存放一个ASCII字符,或者char的指针用来指向一个字符串。

从来不使用普通的int类型。

变量名称

变量以其类型为前缀:c代表char,s代表int16_t(short),l代表int32_t(long),x代表BaseType_t及其他非标准类型(结构体、任务句柄、队列句柄等)。

如果变量是无符号型,则其前缀是u;如果变量是指针,则其前缀是p。例如,一个类型为uint8_t的变量将以uc作为前缀,而一个类型为char的指针变量将以pc作为前缀。

函数名称

函数的前缀是函数返回的类型和其中含有定义函数的文件。例如:

• vTaskPrioritySet()返回void,并在task.c中定义。

• xQueueReceive()返回类型为BaseType_t的变量,并在queue.c中定义。

• pvTimerGetTimerID()返回指向void的指针,并在timers.c中定义。

文件范围(私有)函数的前缀为prv。

格式化

总是将一个制表符设置为等于4个空格。

宏名称

大多数宏用大写字母书写,并以小写字母为前缀表示宏在哪里定义。宏前缀的例子如表1-3所示。

表1-3 宏前缀

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

常见的宏定义如表1-4所示,这些宏在整个FreeRTOS源代码中都有使用。

表1-4 常见的宏定义

强制类型转换的理由

FreeRTOS源代码可以用多种编译器进行编译,所有这些编译器在产生警告的方式和时间上会有所不同。尤其是不同的编译器希望以不同的方式进行类型转换,因此FreeRTOS源代码中包含了比一般情况下更多的类型转换。


[1]译者注:目前已支持40多种处理器架构,包括天津飞腾公司腾珑E2000处理器。

[2]调度算法在3.12节中讨论。