说说我对uCOS-II任务调度的理解,大家看看对不,不对请指教

2019-07-20 22:20发布

OS:uCOS-II

以前我一直认为是一个任务只要在运行,只有中断才可以打断它继续运行;但是最近测试发现只要比它优先级高的任务都可以打断它继续运行。只要高优先级的任务满足运行的条件,不管低优先级任务是否在运行,它都可以打断它来抢先运行自己。


总结:
1、中断可以打断任何任务而抢先运行,不管任务是否在运行都没有关系,即中断来了它就要使用CPU
2、高优先级的任务只要满足运行的条件,不管低优先级的任务是否在运行都没有关系,即使低优先级任务在运行,高优先级任务也可以打断它【类似中断的现象】而运行自己


这样理解对吗?不对请指点
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
正点原子
1楼-- · 2019-07-21 00:49
正确,ucos就是抢占型的操作系统,抢占的意思就是你的第2点了。
特朗姆斯
2楼-- · 2019-07-21 03:00
 精彩回答 2  元偷偷看……
天山狐狸
3楼-- · 2019-07-21 07:27
特朗姆斯 发表于 2016-5-3 09:50
你说的高优先级任务打断低优先级任务是指可剥夺型内核,UCOS的内核是不可剥夺的

当前任务完成后系统进入 ...

哦,以前我也是那么理解的

但是上次测试发现在一个任务中输出了另一个任务的信息,所以又改变了想法?
特朗姆斯
4楼-- · 2019-07-21 09:20
天山狐狸 发表于 2016-5-3 10:00
哦,以前我也是那么理解的

但是上次测试发现在一个任务中输出了另一个任务的信息,所以又改变了想法?

贴一下具体的测试代码?

有时候可能因为其它原因也导致了这个现象
天山狐狸
5楼-- · 2019-07-21 12:43
特朗姆斯 发表于 2016-5-3 10:09
贴一下具体的测试代码?

有时候可能因为其它原因也导致了这个现象

好的,代码在屋里的电脑上,我看看能否想起来
天山狐狸
6楼-- · 2019-07-21 16:41
特朗姆斯 发表于 2016-5-3 10:09
贴一下具体的测试代码?

有时候可能因为其它原因也导致了这个现象

[mw_shl_code=applescript,true]static void Task1(void *pdata)
{
  (void)pdata;
  uint8_t  err;
  uint16_t temp;

  while(1)
  {
    temp=(u32)OSQPend(MsgQ_RangingDis_M2_LCD_Disp,0,&err);//请求消息队列,这个消息从中断中给出
    if(err==OS_ERR_NONE)
    {
      printf("%02d ",temp);
    }
  }
}
static void Task2(void *pdata)
{
  (void)pdata;
  uint8_t  err;

  while(1)
  {
    printf("低优先级任务开始运行,下面不应该出现其他任务的提示信息 ");
    ......
    printf("低优先级任务结束 ");


    OSTimeDlyHMSM(0,0,1,0);
  }
}[/mw_shl_code]

测试结果是:任务2的两个输出信息中出现了任务1的输出信息。【任务1的优先级高于2,1的消息是中断给的】

一周热门 更多>