OpenEdv-开源电子网

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

uCOS高优先级任务无法抢占低优先级任务

[复制链接]

10

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2021-6-21
在线时间
99 小时
发表于 2023-1-6 09:09:22 | 显示全部楼层 |阅读模式
1金钱
背景:
ucos-II中一共两个任务,TaskLed_0任务高优先级,TaskLed_1任务低优先级;
问题:
1.    在低优先级任务TaskLed_1中加入死循环while(1);系统就不能进行任务切换了,会一直停在TaskLed_1任务中,
2.    取消死循环while(1),uCOS则可以正常切换任务
这种是什么情况?

  1. void TaskLed_0(void *pdata)
  2. {
  3.     while(1)
  4.     {
  5.         if(GPIO_ReadOutputDataBit(LED_PORT,LED_PIN_0))
  6.         {
  7.             GPIO_ResetBits(LED_PORT,LED_PIN_0);
  8.         }
  9.         else
  10.         {
  11.             GPIO_SetBits(LED_PORT,LED_PIN_0);
  12.         }

  13.         OSTimeDlyHMSM(0,0,0,500);
  14.     }
  15. }

  16. void TaskLed_1(void *pdata)
  17. {
  18.     while(1)
  19.     {
  20.         if(GPIO_ReadOutputDataBit(LED_PORT,LED_PIN_1))
  21.         {
  22.             GPIO_ResetBits(LED_PORT,LED_PIN_1);
  23.         }
  24.         else
  25.         {
  26.             GPIO_SetBits(LED_PORT,LED_PIN_1);
  27.         }
  28.                 while(1);//程序会一直卡在这一行,不会切换到高优先级任务中

  29.         OSTimeDlyHMSM(0,0,0,500);
  30.     }
  31. }
复制代码


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

482

帖子

0

精华

高级会员

Rank: 4

积分
744
金钱
744
注册时间
2021-4-15
在线时间
302 小时
发表于 2023-1-6 20:30:37 | 显示全部楼层
while(1); 他不死谁死呀! 本来就是单线程运行,要调度要调用那个延时调度函数
日常敲键--头秃一片
回复

使用道具 举报

10

主题

14

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2021-6-21
在线时间
99 小时
 楼主| 发表于 2023-1-7 08:33:42 来自手机 | 显示全部楼层
  2023-1-6 20:30
while(1); ! ,

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-5-29 17:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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