本文最后更新于 341 天前,如过您尝试失败,不出意外应该是出意外了。
变量
定义变量时往往会把变量的类型当作前缀加在变量上,这样做的好处是让用户一看到这个变量就知道该变量的类型。
比如char型变量的前缀是c,short型变量的前缀是s,long型变量的前缀是l,portBASE_TYPE类型变量的前缀是x。
还有其他的数据类型,比如数据结构、任务句柄、队列句柄等定义的变量名的前缀也是x。
如果一个变量是无符号型的,那么会有一个前缀u,如果是一个指针变量,则会有一个前缀p。
因此,当我们定义一个无符号的char型变量时会加一个uc前缀,当定义一个char型的指针变量时会加一个pc前缀。
函数名
函数名包含了函数返回值的类型、函数所在的文件名和函数的功能,如果是私有的函数,则会加一个prv(private)的前缀。特别地,在函数名中加入了函数所在的文件名,这将帮助用户提高寻找函数定义的效率并了解函数作用,具体举例如下:
- vTaskPrioritySet()函数的返回值为void型,在task.c文件中定义。
- xQueueReceive()函数的返回值为portBASE_TYPE型,在queue.c文件中定义。
- vSemaphoreCreateBinary()函数的返回值为void型,在semphr.h文件中定义。
宏
宏均由大写字母表示,并配有小写字母的前缀,前缀用于表示该
宏在哪个头文件定义,部分举例具体如下表所示。
前缀 | 宏定义的文件 |
port(举例, portMAX_DALAY) | portable.h |
task(举例, taskENTER_CRITICAL()) | task.h |
pd(举例, pdTRUE) | projedefs.h |
config(举例, configUSE_PREEMPTION) | FreeRTOSConfig.h |
port(举例, enQUEUE_FULL) | projdefs.h |
这里要注意的是信号量的函数都是一个宏定义,但是其函数的命名方法是遵循函数的命名方法而不是宏定义的方法。
在贯穿FreeRTOS的整个代码中,还有几个通用的宏定义也要注意一下,都是表示0和1的宏,具体下表所示。
宏 | 实际的值 |
pdTRUE | 1 |
pdTRUE | 0 |
pdPASS | 1 |
pdFAIL | 0 |