FreeRTOS的任务优先级不是有32个吗,自己用STM32 HAL库的FreeRTOS创建一些任务发现,HAL库的任务优先级只有几个,任务优先级的枚举原型如下:
typedef enum {
osPriorityIdle = -3, ///< priority: idle (lowest)
osPriorityLow = -2, ///< priority: low
osPriorityBelowNormal = -1, ///< priority: below normal
osPriorityNormal = 0, ///< priority: normal (default)
osPriorityAboveNormal = +1, ///< priority: above normal
osPriorityHigh = +2, ///< priority: high
osPriorityRealtime = +3, ///< priority: realtime (highest)
osPriorityError = 0x84 ///< system cannot determine priority or thread has illegal priority
} osPriority;
在main函数中创建任务时,任务的优先级只能从这个枚举结构里面选择,感觉这个任务优先级的个数好少,还是个人理解错了,任务创建如下:
osThreadId defaultTaskHandle; //创建任务句柄
void StartDefaultTask(void const * argument); //任务函数声明
int main(void)
{
........//系统时钟和外设初始化
osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128); //defaultTask为任务名称、StartDefaultTask为任务函数、osPriorityNormal为任务优先级,128为堆栈内存
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL); //创建一个任务线程
osKernelStart(); //任务调度开启
}
/* StartDefaultTask function */
void StartDefaultTask(void const * argument) //任务函数
{
for(;;){
LED0_On();
LED1_On();
osDelay(1000);
LED0_Off();
LED1_Off();
osDelay(1000);
}
}
问题:根据上面HAL库的任务优先级枚举结构看出,任务优先级只有几个,那如果要创建多个任务,那这种优先级数不够啊,有达人可以帮忙解释一下吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
嗯,ST封装的这个只能创建多个同级的任务或几个优先级不同的任务,那还是用原生的那个比较好。
一周热门 更多>