硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3699|回复: 7
收起左侧

[μCOS-II] UCOS运行一段后发生任务调度停止?

[复制链接]

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
发表于 2016-8-29 16:18:06 | 显示全部楼层 |阅读模式
我的系统共建7个任务,液晶显示的任务优先级最低,现在是运行一断时间后,时间为十几分种到几个小时不等,系统突然停止任务调试,
就一直停止在液晶显示的任务里,其它比它优先级高的也不执行了。堆栈也没有发生溢出,全程里只有一个信号量,信号里即使
注释掉也没有改善。所以请知道的朋友帮个忙。
液晶显示的任务代码如下:

  while(1)
  {         
    if(timecount==0)
      {OSTimeDlyHMSM(0,0,0,10);
       WM_Exec();
       timecount=10;
      }
    else
      {OSTimeDlyHMSM(0,0,0,10);      
       GUI_TOUCH_Exec();      
       timecount--;
      }  
  }
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106938
QQ
发表于 2016-8-30 00:58:06 | 显示全部楼层
不用这种写法,直接
     GUI_TOUCH_Exec();      
    GUI_Delay(10)

简单又方便。
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-8-30 10:21:28 | 显示全部楼层

回 eric2013 的帖子

eric2013:
不用这种写法,直接
     GUI_TOUCH_Exec();      
    GUI_Delay(10)

简单又方便。
我现主要是任务不调度的问题,经过了解之后情况是这样的:
在调度函数OS_Sched (void)中发现

            if (OSPrioHighRdy != OSPrioCur) {          /* No Ctx Sw if current task is highest rdy     */
                OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];
#if OS_TASK_PROFILE_EN > 0
                OSTCBHighRdy->OSTCBCtxSwCtr++;         /* Inc. # of context switches to this task      */
#endif
                OSCtxSwCtr++;                          /* Increment context switch counter             */
                OS_TASK_SW();                          /* Perform a context switch                     */
            }
正常是优先级7切换到优先级3,现在是OSPrioHighRdy 与OSPrioCur都等于3了,
但任务控制板还是任务优先级7的控制板,即OSTCBHighRdy=优先级7的控制板
理论应该是优先级3的控制板。所以一直停止的优先级7的任务上,不调度了。
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-8-30 13:55:33 | 显示全部楼层

回 fanyanxi 的帖子

fanyanxi:我现主要是任务不调度的问题,经过了解之后情况是这样的:
在调度函数OS_Sched (void)中发现

            if (OSPrioHighRdy != OSPrioCur) {          /* No  .. (2016-08-30 10:21) 
解决了,原来我UCOS2.86函数有个漏洞。把OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];移到if (OSPrioHighRdy != OSPrioCur)前就好了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106938
QQ
发表于 2016-8-31 00:45:25 | 显示全部楼层

回 fanyanxi 的帖子

fanyanxi:解决了,原来我UCOS2.86函数有个漏洞。把OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];移到if (OSPrioHighRdy != OSPrioCur)前就好了。 (2016-08-30 13:55)
[s:151]
解决了就好,这个版本的确有些老了,可以考虑使用新的2.92.XX版本。
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-8-31 17:20:21 | 显示全部楼层

回 eric2013 的帖子

eric2013:[s:151]
解决了就好,这个版本的确有些老了,可以考虑使用新的2.92.XX版本。
 (2016-08-31 00:45) 
经过长时间测试,还是不行,没有解决。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106938
QQ
发表于 2016-9-1 00:53:00 | 显示全部楼层

回 fanyanxi 的帖子

fanyanxi:经过长时间测试,还是不行,没有解决。 (2016-08-31 17:20) 
应该是程序设计还有问题,排查下这些任务,看看是那个任务导致的,另外不是只有一个任务执行emWin。
回复

使用道具 举报

65

主题

432

回帖

632

积分

金牌会员

积分
632
发表于 2017-2-6 21:11:42 | 显示全部楼层
楼主问题解决了吗?发帖子,负点儿责任行不
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-11 04:50 , Processed in 0.205921 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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