OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3703|回复: 2

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

[复制链接]

30

主题

97

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2016-4-13
在线时间
68 小时
发表于 2018-9-17 16:56:10 | 显示全部楼层 |阅读模式
5金钱
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#楼]

因为你用的不是原生的FreeRTOS,而是ST自己封装的FreeRTOS!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-9-17 16:56:11 | 显示全部楼层
因为你用的不是原生的FreeRTOS,而是ST自己封装的FreeRTOS!
回复

使用道具 举报

30

主题

97

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2016-4-13
在线时间
68 小时
 楼主| 发表于 2018-9-17 17:23:42 | 显示全部楼层
zuozhongkai 发表于 2018-9-17 17:17
因为你用的不是原生的FreeRTOS,而是ST自己封装的FreeRTOS!

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 04:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表