FreeRTOS代码规范

TickType_tBaseType_tUBaseType_t
用于记录系统节拍的数据类型
具体的数据类型取决于
configTICK_TYPE_WIDTH_IN_BITS
基本数据类型,是/否,成功/失败
当前处理器架构下最有效率的数据类型(int32_t)
BaseType_t的无符号版本,非负数
对于STM32F1单片机,该数据类型为uint32_t

TickType_t的使用场景

TickType_t作为xTaskGetTickCount()的返回值:
TickType_t xTaskGetTickCount(void);
这里返回的TickType_t是系统节拍的计数值,不是实际的时间,可以通过pdTICKS_TO_MS()宏转换为实际的时间:
TickType_t now = pdTICKS_TO_MS(xTaskGetTickCount() );

TickType_t作为vTaskDelay()的参数:
void vTaskDelay(const TickType_t xTicksToDelay);
参数表示的是要延时的系统节拍数,不是真实的时间。可以通过pdMS_TO_TICKS()宏转换为实际的时间:
vTaskDelay(pdMS_TO_TICKS(100));//延时100ms

BaseType_t和UBaseType_t的使用场景

BaseType_t类型作用函数的返回值来指示函数调用是否成功
BaseType_t xTaskCreate(...);
返回值BaseType_t为pdPASS代表成功,pdFAIL失败。

12345678
if(xTaskCreate(vLED1Task, "LED1", 128, NULL, 1, NULL) == pdPASS){	...//任务创建成功的代码}else{	...//任务创建失败的代码}

BaseType_t作为参数,用来表示是和否。
例如创建一个软件定时器:
TimerHandle_t xTimerCreate (..., BaseType_t xAutoReload);

12345
//创建Timer1,周期100ms,不自动重装TimerHandle_t xTimer1 = xTimerCreate ("Timer1", pdMS_TO_TICKS(100), pdFALSE, NULL, vTimer1Callback); //创建Timer2,周期50ms,自动重装TimerHandle_t xTimer2 = xTimerCreate ("Timer2", pdMS_TO_TICKS(50), pdTRUE, NULL, vTimer2Callback);

UBaseType_t用来表示一个非负数
BaseType_t xTaskCreate(..., UBaseType_t uxPriority);

12
xTaskCreate(vLED1Task, "LED1", 128, NULL, 1, NULL);xTaskCreate(vLED3Task, "LED3", 128, NULL, 1, NULL);

变量命名规则

变量名 = 类型前缀 + 实际名字。例如:void vTask1(void *pvParameters)
*pvParameters的pv代表类型前缀 - pointer to void = void * ,Parameters代表变量真实的名字。

前缀类型
vvoid
cchar(int8_t)
sshort(int16_t)
llong(int32_t)
xBaseType_t,TickType_t或其他数据类型
eenmu枚举
p指针
uunsigned无符号数

对于int globalVar1 = 36;应该修改为int lGlobalVar1 = 36;,l代表long。

int globalVar2[100];是一个int类型的数组,数组是一种指针,应该修改为int plGlobalVar2[100];

char *argv[],类型是char *类型的数组,char *是一重指针,数组又是一重指针,应该有2个p。应该修改为char *ppcArgv[]

int *pBuffer,类型是int *,应该修改为int *plBuffer

函数命名规则

函数名 = 返回值类型前缀 + 模块名 + 实际名字
如果是静态函数,返回值类型前缀为prv,即private,私有的作用在文件内部的,模块名不用写。

例如,BaseType_t xTaskCreate(...);
x是返回值类型是BaseType_t,Task表示模块的名称为task.c,Create表示函数的真实名称。

例如在my_file.c文件中

1234567891011121314
static int staticGlobalVar1 = 100; static int Square(int input){    return input * input;} int GetNextSquare(){    static int num = 1;    int ret = Square(num);    num++;    return ret;}

static int Square(int input)是static静态方法,前缀加prv,应该修改为:static int prvSquare(int input)

int GetNextSquare(),返回值是int,因此前缀为l。模块名为Myfile,因此修改为int lMyfileGetNextSquare()

宏定义命名规则

宏定义名 = 文件名前缀(小写) + 实际名字(大写,单词之间下划线分割)

pdTRUE/pdFLASE/pdPASS/pdFAILconfigMAX_PRIORITIESportMAX_DELAY
pd = projdef.hconfig = FreeRTOSConfig.hport = portmarco.h
🔍 ×