0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS中相对延时与绝对延时的区别

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-12 10:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


相信许多朋友都有过这么一个需求:固定一个时间(周期)去处理某一件事情。

比如:固定间隔10ms去采集传感器的数据,然后通过一种算法计算出一个结果,最后通过指令发送出去。

你会通过什么方式解决呢?

Ⅰ解决办法

很多人肯定首先想到的是:利用定时器,定时10ms中断,在中断里面处理。

这种利用定时器中断解决的办法,在处理程序耗时很短(微秒级一下)的情况下是可以的。但是,如果处理程序耗时较长(几十微妙,甚至毫秒级),显然在中断里面处理不现实。

因此,就引出了今天的绝对延时。在实时操作系统FreeRTOS任务中,利用vTaskDelayUntil绝对延时即可完美解决这个问题。

Ⅱ相对延时和绝对延时的含义

本文拿FreeRTOS中相对延时vTaskDelay函数,绝对延时vTaskDelayUntil函数来说明。

相对延时:指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间(参数:滴答值)结束。

绝对延时:指每隔指定的时间(参数:滴答值),执行一次调用vTaskDelayUntil()函数的任务。

文字描述可能不够直观理解,下面章节结合代码例子、延时值(IO高低变化波形)、任务执行图来详细讲述一下他们的区别。

Ⅲ相对延时和绝对延时区别

以实际代码为例说明:一个任务中,添加一个10ms系统延时,然后,在执行任务(耗时1ms左右,例子以延时代替)。

相对延时代码

绝对延时代码

提示:

1.TestDelay这个延时函数仅仅用于测试(延时1ms),用于代替采集、算法、发送等耗时时间。

2.两个代码唯一区别在于系统延时不同,一个vTaskDelay(10);,一个vTaskDelayUntil(&xLastWakeTime, 10);

3.系统时钟频率为1000,也就是上面系统延时10个滴答,即10ms。

看到代码,你想到了他们输出结果的差异吗?

来看下结果的差异:用PA0这个引脚输出的高低电平,得出延时时间。

相对延时结果

绝对延时结果

结果为:相对延时的周期为系统延时10ms +执行任务1ms的时间,总共11ms时间。绝对延时的周期即为10ms时间.

换一种方式看区别

如果上面的区别还没明白,再来讲一个更容易理解的区别,通过文字 +任务执行图来说明。

1.相对延时

先看任务执行图,按照上面代码的方式呈现:

这里会牵涉到操作系统任务切换、高优先级任务抢占等一些原理,若不了解,请转移直到了解再回来。

上电,TEST任务进入延时(阻塞)状态,此时系统执行其他就绪任务。FreeRTOS内核会周期性的检查TEST任务的阻塞是否达到,如果阻塞时间达到,则将TEST任务设置为就绪状态,如果就绪任务中TEST任务的优先级最高,则会抢占CPU,再次执行任务主体代码,不断循环。

TEST任务每次系统延时都是从调用延时函数vTaskDelay()开始算起的,所以叫相对延时。

从上图可以看出:

如果执行TEST任务的过程中发生中断,或者具有更高优先级的任务抢占了,那么TEST任务执行的周期就会变长,所以使用相对延时函数vTaskDelay(),不能周期性的执行TEST任务。

2.绝对延时

代码中定义的变量xLastWakeTime,其实是用来保存上一次的系统计数器值(方便检测下一个延时时间是否到来)。

和上面相对延时程序执行图比较,可以看出,系统延时的时间包含了程序执行的时间。即时中途有中断,或更高优先级任务打断,不会影响下一次执行的时间(也就是这个周期不会变,当然,打断时间不能超过系统延时值)。

提示:图片中添加了一段话:一般来说,程序执行时间要小于总间隔时间(10ms)。

如果打断时间太长,回来之后延时都超过了,则会立马执行程序,不会再延时(任务不会再阻塞延时)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2574

    文章

    54382

    浏览量

    786141
  • FreeRTOS
    +关注

    关注

    14

    文章

    497

    浏览量

    66361
  • Test
    +关注

    关注

    0

    文章

    80

    浏览量

    27690
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    感知再进化,新增“触发延时”功能!

    ——「触发延时」正式上线!这不仅是一个功能的增加,更是对产品稳定性和场景适用性的一次深刻优化。一、亮点速览什么是“触发延时”功能?简单来说,“触发延时”是指在雷达检测到
    的头像 发表于 11-10 11:05 317次阅读
    感知再进化,新增“触发<b class='flag-5'>延时</b>”功能!

    信号同步控制器 轻松无延时同步多种设备信号

    ZQC-T信号同步控制器可轻松同步多个设备信号,实现整个视觉系统的各个应用单元之间无延时的同步信号,为调试工作减少时间。
    的头像 发表于 10-17 11:34 249次阅读
    信号同步控制器 轻松无<b class='flag-5'>延时</b>同步多种设备信号

    闭环控制存在延时

    我用labview FPGA来进行直线电机闭环控制,控制器是cRIO 9049 ,ni 9234输入,ni 9263输出,一直会有一个很大的延时,将输入换成ni 9205延时减小了一点,但依旧存在,这是为什么呢?
    发表于 09-21 22:19

    探头的延时介绍

    探头的延时是指信号从被测点传输到示波器输入端的时间间隔,即信号经过探头的探针、传输电缆、内部电路等路径后,到达示波器采样系统的总时间延迟,(以下讨论低速信号情景,忽略示波器通道间ps级的延时误差)。不同型号的探头延时存在差异,尤
    的头像 发表于 09-17 17:32 649次阅读
    探头的<b class='flag-5'>延时</b>介绍

    认识探头的延时

    )。不同型号的探头延时存在差异,尤其是有源探头和无源探头混用,相对延迟较大时,会在示波器上看到波形错位现象。图1有源探头(CH1)与无源探头(CH2)同时测量10MH
    的头像 发表于 08-26 17:04 645次阅读
    认识探头的<b class='flag-5'>延时</b>

    杰理 2.4G 蓝牙音频低延时耳机方案:芯片选型 延时 硬件设计

    用 JL7083G、立体声用 JL7083F;编码传输解码流程,上行经 USB 采样、编码后通过 2.4G / 蓝牙传输,下行经解码、DAC 回放出声,TWS 总延时约 20ms、头戴式约 17ms,目前有三种方案,功耗在 20-30mA 左右,硬件设计需注意电容选型
    的头像 发表于 06-20 14:31 1297次阅读
    杰理 2.4G 蓝牙音频低<b class='flag-5'>延时</b>耳机方案:芯片选型  <b class='flag-5'>延时</b>  硬件设计

    详解FreeRTOS与SAFERTOS的区别

    开源免费的FreeRTOS由Richard Barry在WHIS工作时创建,WHIS基于FreeRTOS的功能模型,通过完整的HAZOP分析,确定了功能模型和API的所有的弱点,减轻所有薄弱环节,并采用IEC 61508 SI
    的头像 发表于 06-04 16:58 686次阅读
    详解<b class='flag-5'>FreeRTOS</b>与SAFERTOS的<b class='flag-5'>区别</b>

    PCIe EtherCAT实时运动控制卡PCIE464点胶工艺的同步/提前/延时开关胶

    运动缓实现同步/提前/延时开关胶
    的头像 发表于 05-29 13:49 532次阅读
    PCIe EtherCAT实时运动控制卡PCIE464点胶工艺<b class='flag-5'>中</b>的同步/提前/<b class='flag-5'>延时</b>开关胶

    DS1124 5.0V、8位可编程延时电路技术手册

    DS1124是一款功能与DS1021-25类似的8位可编程定时元件。可以通过3线串行接口编程256级延时间隔。DS1124具有0.25ns的步进,可以提供20ns至高达84ns延时,积分非线性为±3ns。
    的头像 发表于 04-15 09:28 1015次阅读
    DS1124 5.0V、8位可编程<b class='flag-5'>延时</b>电路技术手册

    示波器差分探头延时测量:从理论到工程实践的关键解析

    示波器差分探头延时的测量是高速信号分析的重要环节。通过时域测量法或频域测量法,可以准确计算探头的延时,从而优化测量结果。在实际应用,了解影响延时
    的头像 发表于 04-14 16:59 774次阅读
    示波器差分探头<b class='flag-5'>延时</b>测量:从理论到工程实践的关键解析

    延时继电器的工作原理和接线方法

    延时继电器作为一种在电气系统中广泛应用的控制元件,具有在电路实现定时闭合或断开控制的重要功能。通过引入延时功能,对电路系统的精确控制和管理,适应不同的应用场景和需求,提高生产效率、降低
    的头像 发表于 02-07 16:09 2844次阅读

    断电延时继电器的应用

    延时继电器作为一种重要的电气控制元件,在现代电气系统中发挥着不可或缺的作用。其基于一个或多个可调的计时器电路,通过与继电器相连的控制电路,实现了在电路定时闭合或断开控制的功能。 一、工作原理 延时
    的头像 发表于 02-07 16:07 1898次阅读

    延时继电器功能汇总与应用

    延时继电器是一种在电气系统中广泛应用的控制元件,在电路实现定时闭合或断开控制,为各种应用场景提供灵活的时间管理功能。 通常,聚英延时继电器由一个控制电压引发,该控制电压可以是任何符合电器设备功能
    的头像 发表于 01-17 16:03 1184次阅读

    延时继电器应用场景

    延时继电器是一种在电气系统中广泛应用的控制元件,通过引入延时功能,实现了在电路定时闭合或断开控制的重要任务。 延时继电器的工作原理,基于一个或多个可调的计时器电路,2路/4路/8路电
    的头像 发表于 01-16 16:27 1106次阅读

    AM1305采样延时很长是哪里的问题?

    在使用AM1305作为电机的相电流采样时候,如果按照20MHz的时钟,256的OSR,输出为16位,那延时就是50ns*256*2=25.6us,这样的采样延时也太长了吧,还是我计算的不对?
    发表于 12-11 08:30