相对延时与绝对延时的区别浅析

文章介绍了在实时操作系统(RTOS)中,相对延时与绝对延时的区别。相对延时是从执行函数开始计时的阻塞,而绝对延时确保任务按固定周期执行。举例说明了绝对延时如何保证周期性任务的执行时间,强调其在周期性任务控制中的应用。
摘要由CSDN通过智能技术生成

相对延时与绝对延时的区别浅析:


先看一下两者的定义:

相对延时:指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束
绝对延时:指将整个任务的运行周期看成一个整体,适用于需要按照一定频率运行的任务


相对延时的概念很好理解吧,其实就是把任务阻塞指定的延时时间段之后,解除对任务的阻塞,然后执行之后的代码。

绝对延时就比较难理解了,其实理解它的关键在于概念的后半句:适用于需要按照一定频率运行的任务,也就是说,如果循环调用绝对延时函数,那么任务的运行时间严格按照绝对延时函数的参数指定的周期去执行任务的。
举个例子:

void task1(void *pvParameters)
{    
    while (1)
    {
       xTaskDelayUntil(1000);
       printf("I love IU!\r\n");
    }
}

这个任务循环调用绝对延时函数延时1秒打印字符串。从第一次调用printf函数这个时刻开始考虑,打印字符串,需要一段时间,然后任务一在这个周期内没有事情做了,开始执行其他的优先级与task1相同的任务,或者处理中断服务函数,或者去处理优先级更低的任务。那么究竟什么时候才会再次去执行task1呢?答案是,从第一次调用printf函数这个时刻开始到某个时刻为止,这两个时刻之间的时间段恰好等于绝对延时函数参数指定的时间,就是在这个时刻开始再次执行task1,当然了,并不是立即去执行它,而是先把task1添加到就序列表,等待任务调度器调度执行它

发现了吧,绝对延时函数能够保证总是按照它的参数指定的周期去干某件事情,这就是它最常用的一个应用场景!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GuiStar_李什么恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值