STM32 HAL库 FreeRTOS的任务优先级问题

2019-07-20 06:06发布

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库的任务优先级枚举结构看出,任务优先级只有几个,那如果要创建多个任务,那这种优先级数不够啊,有达人可以帮忙解释一下吗?


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
taizonglai
1楼-- · 2019-07-20 06:57
因为你用的不是原生的FreeRTOS,而是ST自己封装的FreeRTOS!
刺客_奋斗的菜鸟
2楼-- · 2019-07-20 11:57
zuozhongkai 发表于 2018-9-17 17:17
因为你用的不是原生的FreeRTOS,而是ST自己封装的FreeRTOS!

嗯,ST封装的这个只能创建多个同级的任务或几个优先级不同的任务,那还是用原生的那个比较好。

一周热门 更多>