学习一个RTOS,弄清楚它的编程风格很重要,这可以大大提高我们阅读代码的效率(虽然我不太喜欢这种风格)。
1、数据类型
FreeRTOS针对不同的处理器,对标准C的数据类型进行了重定义。在类型前一般加上port ,这里的port表示接口,在移植FreeRTOS到处理器上时,需要将这些接口文件把它们连接在一起。在FreeRTOS中,int型从不使用,只使用short 、long型。在corten-M内核的MCU中,short为16位,long为32位。
FreeRTOS中的数据类型重定义
1 )#define portCHAR char
2) #define portFLOAT float
3) #define portDOUBLE double
4) #define portLONG long
5) #define portSHORT short
6) #define portSTACK_TYPE uint32_t
7) #define portBASE_TYPE long
2、变量名
把变量的类型当作前缀加在变量上:
char型变量的前缀是c
short型变量的前缀是s
long型变量的前缀是l
portBASE_TYPE类型变量、数据结构、任务句柄、队列句柄等定义变量名前缀为x
如果变量是无符号的,前缀有一个u,如果是指针变量,则会有一个前缀p。
无符号的char型变量会加一个uc前缀
char型的指针变量会加一个pc的前缀。
3、函数名
函数名包含了函数返回值的类型、函数所在的文件名和函数功能,如果是私有函数,则会加一个prv(private)的前缀。
1)vTaskPrioritySet()函数的返回值为void型,在task.c文件中定义。
2)xQueueReceive()函数的返回值为portBASE_TYPE型,在queue.c文件中定义。
3)vSemaphoreCreateBinary()函数的返回值为void型,在semphr.h文件中定义。
4、宏
由大写字母表示,并配有小写字母的前缀,前缀用于表示该宏在哪个头文件定义:
portMAX_DELAY 在文件 porttable.h 中定义
taskENTER_CRITIOAL() 在文件 task.h 中定义
pdTRUE 在文件 projdefs.h 中定义
特别注意的是队列的定义,是按函数名规则 的
errQUEUE_FULL 是在 projdefs.h 中定义的
还有几个通用的宏定义也要注意一下的:
pdTRUE 1
pdFALSE 0
pdPASS 1
pdFAIL 0
5、格式
1个Tab键=4个空格
当两个编译器的Tab键大小设置得不一样时,移植代码时会变乱。