Liuyk_0321 发表于 2010-1-7 08:58:25

请教关于uC/OS II的延时函数

1.请问下面这段程序的执行情况怎样?

Task_A ()
{
   while(1)
   {
   A段;
   OSTimeDly(1);
   B段;
   }
}

(1)是否任务到OSTimeDly(1)处就会被挂起?
(2)延时到后,是接着执行B段,还是重新执行A段?如果执行A段,那B段是否就永远不会被执行?


2.请问OSTimeDly()是不是只能延时任务?
在任务调用的用户函数中,能否使用OSTimeDly()来延时?如果使用OSTimeDly(),那是否将会挂起调用该用户函数的任务?


3.在uC/OS II中,是否存在延时函数,在任务调用的用户函数中可以调用?

请大虾们解惑,谢谢!

csformat 发表于 2010-1-7 15:24:49

(1)是否任务到OSTimeDly(1)处就会被挂起?   

绝对的挂起


(2)延时到后,是接着执行B段,还是重新执行A段?如果执行A段,那B段是否就永远不会被执行?

执行B,如果在延时中发生中断,则执行中断后,执行被中断激活的,比此任务有更高优先级的任务,后返回B


2.请问OSTimeDly()是不是只能延时任务?
在任务调用的用户函数中,能否使用OSTimeDly()来延时?如果使用OSTimeDly(),那是否将会挂起调用该用户函数的任务?

S

3.在uC/OS II中,是否存在延时函数,在任务调用的用户函数中可以调用?

csformat 发表于 2010-1-7 15:28:00

2.请问OSTimeDly()是不是只能延时任务?
在任务调用的用户函数中,能否使用OSTimeDly()来延时?如果使用OSTimeDly(),那是否将会挂起调用该用户函数的任务?

是的,同(2)

3.在uC/OS II中,是否存在延时函数,在任务调用的用户函数中可以调用?


OSTimeDly()唯一的延时函数,如果你自己写延时(不保护sp,堆栈啥的),在延时期间有中断,则程序必飞

Liuyk_0321 发表于 2010-1-8 13:05:44

To csformat:谢谢你的解答!

“OSTimeDly()唯一的延时函数,如果你自己写延时(不保护sp,堆栈啥的),在延时期间有中断,则程序必飞”

会这样吗?

我在任务调用的用户函数中再调用下面的延时函数会有问题吗?

void Delay_xMS(u8 k)
{
        u16 i,j;

        for(i=k+1;i>0;i--)
                {
                        for(j=0xFFFF;j>0;j--) ;
                }
}

jdjsxf 发表于 2010-1-8 15:03:18

回复【3楼】Liuyk_0321
-----------------------------------------------------------------------

此延时非彼延时。
两个延时的作用不一样的。

OSTimeDly()可以把当前的任务挂起,也就是系统可以去执行其他的任务。
而你的延时纯粹是在这个干耗时间。

l19830312 发表于 2010-4-1 15:53:51

OSTimeDly() 中调用了调度函数 任务可能会切换
页: [1]
查看完整版本: 请教关于uC/OS II的延时函数