ljt80158015 发表于 2012-6-29 23:18:09

ucos任务切换是不是一定要关中断?

ucos任务切换是不是一定要关中断?

Jigsaw 发表于 2012-6-29 23:37:24

你看临界区的代码就知道了
在很多教程里面这个是重点讲解的
应该不多

ljt80158015 发表于 2012-6-30 09:20:03

Jigsaw 发表于 2012-6-29 23:37 static/image/common/back.gif
你看临界区的代码就知道了
在很多教程里面这个是重点讲解的
应该不多

有什么方法能缩短关中断的时间?

John_Lee 发表于 2012-6-30 09:42:37

如果你只是使用ucos,那么你就需要了解它的实时特性,如果你想“缩短”关中断的时间,那就改写它吧。

ljt80158015 发表于 2012-7-1 10:23:50

John_Lee 发表于 2012-6-30 09:42 static/image/common/back.gif
如果你只是使用ucos,那么你就需要了解它的实时特性,如果你想“缩短”关中断的时间,那就改写它吧。 ...

发现每次中断服务程序退出时,都要查找一次最高优先级的任务,完成一次任务的切换.

把非 时钟节拍的中断 切换任务取消掉 会不会好一点 ?

John_Lee 发表于 2012-7-1 22:04:18

显然不能简单地取消某中断可能导致的任务切换,否则ucos就只能在systick中断切换任务,而失去了“抢占”的优点。
这样做可能有些改善:void Handler()
{
    do something...
    if (need wakeup task) {
      OSIntEnter();
      OS...Post(...);
      OSIntExit();
    }
}在 do something,可以处理一些“与任务调度无关”的操作,如果中断服务例程自己就能处理事件的全部工作,那么就无需唤醒任务继续处理,此时中断服务例程就可以直接返回了。
当中断服务例程需要唤醒任务继续处理事件,那么就可以在执行 ...Post() 函数前,执行 OSIntEnter(),Post 后,再执行 OSIntExit() 切换任务。

ljt80158015 发表于 2012-7-2 08:58:10

John_Lee 发表于 2012-7-1 22:04 static/image/common/back.gif
显然不能简单地取消某中断可能导致的任务切换,否则ucos就只能在systick中断切换任务,而失去了“抢占”的 ...

如果systick为1ms   仍然可以抢占的啊。

dzcn 发表于 2012-7-2 09:07:39

ljt80158015 发表于 2012-7-2 08:58 static/image/common/back.gif
如果systick为1ms   仍然可以抢占的啊。

实时性降低,假如这个任务需要在0.5ms内响应,这样做,这个任务就有可能不能实时响应

ljt80158015 发表于 2012-7-2 09:09:13

dzcn 发表于 2012-7-2 09:07 static/image/common/back.gif
实时性降低,假如这个任务需要在0.5ms内响应,这样做,这个任务就有可能不能实时响应 ...

OSTimeDLY() 的最小单位是MS吧做不到0.5ms
页: [1]
查看完整版本: ucos任务切换是不是一定要关中断?