一、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 是一个结构体定义



以上相于当定义了一个结构体变量os_thread_def_Display
二、osThreadCreate创建任务
DisplayLCDHandle = osThreadCreate(osThread(Display), NULL);
参数osThread(Display)也是一个宏定义

相当于
DisplayLCDHandle = osThreadCreate(os_thread_def_Display, NULL);

其中优先级还要经过计算才得到

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


博客介绍了osThreadDef宏定义,其作用是定义常量并赋值,还说明了宏中##和#的功能,osThreadDef_t是结构体定义。同时讲解了osThreadCreate创建任务,指出其参数也是宏定义,且优先级需计算。最后提到若想直接用数字定义优先级可修改两处。

484

被折叠的 条评论
为什么被折叠?



