
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节中讨论。