STM32 FreeRTOS的osThreadDef创建任务

一、osThreadDef是一个宏定义

#define osThreadDef(name, thread, priority, instances, stacksz)  \
const osThreadDef_t os_thread_def_##name =  { #name, (thread), (priority), (instances), (stacksz)  }

所以

osThreadDef(Display, DisLCD_Task,osPriorityNormal, 0, 128);
//相当于
const   osThreadDef_t   os_thread_def_Display = { "Display", (DisLCD_Task), (osPriorityNormal), (0), (128)  }

相当于定义了一个 os_thread_def_Display常量,并且赋值。
宏定义中,##的作用就是把2个宏参数连接为1个数,或实现字符串的连接
#的作用就是将#后面的宏参数进行字符串的操作,也就是将#后面的参数两边加上一对双引号使其成为字符串

osThreadDef_t 是一个结构体定义
STM32 FreeRTOS的osThreadDef创建任务_第1张图片
在这里插入图片描述
STM32 FreeRTOS的osThreadDef创建任务_第2张图片

以上相于当定义了一个结构体变量os_thread_def_Display

二、osThreadCreate创建任务

DisplayLCDHandle = osThreadCreate(osThread(Display), NULL);

参数osThread(Display)也是一个宏定义
在这里插入图片描述
相当于
DisplayLCDHandle = osThreadCreate(os_thread_def_Display, NULL);
STM32 FreeRTOS的osThreadDef创建任务_第3张图片
其中优先级还要经过计算才得到
STM32 FreeRTOS的osThreadDef创建任务_第4张图片


总觉得这样定义优先级有点麻烦,如果想直接用数字定义优先级,可以通过修改以下2处实现

STM32 FreeRTOS的osThreadDef创建任务_第5张图片
STM32 FreeRTOS的osThreadDef创建任务_第6张图片

你可能感兴趣的:(STM32,FreeRTOS)