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

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

3天内不再提示

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

璟琰乀 来源:strongerHuang 作者:strongerHuang 2020-11-24 15:44 次阅读

嵌入式软件代码中延时是很常见的,只是延时种类有很多,看你用什么延时。

1

一个延时的问题

问题:周期性(固定一个时间)去处理某一件事情。你会通过什么方式去实现?

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

可能对于很多习惯裸机编程的读者,首先想到的是:利用定时器,定时10ms中断,在中断里面处理。

中断函数适合处理简单数据,不适合算法、通信等需要长时间占用CPU的处理。

对计时精度要求比较高的地方适合定时器,像本章节说的周期性采集传感器数据,要求不适合很高,那么就引入本文说的绝对延时。

在实时操作系统FreeRTOS任务中,利用vTaskDelayUntil绝对延时即可完美解决这个问题。

嵌入式专栏

2

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

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

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

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

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

嵌入式专栏

3

相对延时和绝对延时区别

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

相对延时代码:

绝对延时代码:

说明:

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

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

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

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

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

相对延时结果:

绝对延时结果:

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

嵌入式专栏

4

换一种方式看区别

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

1.相对延时

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

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

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

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

从上图可以看出:

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

2.绝对延时

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

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

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

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

责任编辑:haq

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

    关注

    5082

    文章

    19123

    浏览量

    305129
  • 程序
    +关注

    关注

    117

    文章

    3787

    浏览量

    81037
  • 函数
    +关注

    关注

    3

    文章

    4331

    浏览量

    62604
收藏 人收藏

    评论

    相关推荐

    FPGA延时Verilog HDL实现

    可以在任意时刻启动,可以重复启动,延时时长可调,单位可切换(ms/us),在50MHz时钟下的延时范围是1ms-85899ms/1us-85899us。
    的头像 发表于 11-05 11:26 259次阅读

    延时开关需要零线吗为什么

    延时开关是一种常见的电气控制元件,广泛应用于各种电气设备和系统。它的作用是在威廉希尔官方网站 引入一定的延时,以实现对威廉希尔官方网站 的控制和保护。延时开关的种类
    的头像 发表于 08-19 15:56 444次阅读

    延时开关接线技巧与注意事项有哪些

    延时开关的接线技巧与注意事项是确保延时开关正确安装和稳定运行的关键。 一、延时开关接线技巧 1. 理解延时开关的基本结构 延时开关通常包含多
    的头像 发表于 08-19 15:54 822次阅读

    延时开关改手动开关怎么接线

    延时开关和手动开关是两种不同类型的开关,它们的工作原理和接线方式也有所不同。在某些情况下,我们可能需要将延时开关改为手动开关,以满足特定的使用需求。 一、延时开关和手动开关的区别 工作
    的头像 发表于 08-19 15:49 647次阅读

    延时开关怎么调时间长短

    延时开关是一种常见的电子控制设备,广泛应用于各种场合,如照明、空调、风扇等。它可以根据用户的需求,设定一定的延时时间,实现自动控制。 一、延时开关的工作原理 延时开关的基本组成
    的头像 发表于 08-19 15:46 1618次阅读

    延时开关上l和a是什么意思

    延时开关是一种常见的电子控制元件,广泛应用于各种电子设备和系统。它可以实现对威廉希尔官方网站 的自动控制,使威廉希尔官方网站 在一定的延时后自动接通或断开。在延时开关的标识
    的头像 发表于 08-19 15:45 5952次阅读

    揭秘:单片机硬件与软件延时之大不同!

    在嵌入式项目中,软件开发基本上都会使用到延时,那么,该用软件延时还是硬件延时?它们又有什么区别呢?今天就来讲讲关于硬件延时和软件
    的头像 发表于 07-25 08:11 853次阅读
    揭秘:单片机硬件与软件<b class='flag-5'>延时</b>之大不同!

    断电延时继电器的实际应用

    断电延时继电器作为一种常见的电器设备,在现代生活中有着广泛的应用。它通过控制威廉希尔官方网站 的开关时间来实现电器设备的延时关闭,从而达到省电、安全等目的。以下将结合多个应用实例,详细阐述断电延时继电器的实际应用。
    的头像 发表于 07-17 16:51 985次阅读

    如何确定时间继电器的延时范围

    时间继电器,作为电气控制系统不可或缺的一部分,其延时功能对于系统的稳定运行和精确控制起着至关重要的作用。延时范围的确定不仅影响着系统的响应速度和准确性,还关系到整个系统的安全性和可靠性。因此,本文
    的头像 发表于 06-29 14:24 643次阅读

    延时继电器工作原理及应用实例

    延时继电器是一种电气控制元件,它能够在接收到启动信号后,并非立即执行动作(如闭合或断开触点),而是在经过预设的时间延迟后才执行相应操作。延时继电器广泛应用于各类自动控制系统和保护系统,实现时间控制
    的头像 发表于 06-23 11:54 2740次阅读

    请问esp32的io口怎么做的ns的延时控制?

    之前用stm32都是自己用NOP();语句拼凑出来的ns级延时,esp32是freertos任务会切换,想做到ns延时要怎么做?请大佬指点一下,谢谢!
    发表于 06-21 07:43

    延时继电器与时间继电器的区别

    在电气控制系统延时继电器和时间继电器都是重要的电气元件,它们各自具有独特的功能和应用场景。然而,由于它们在名称和功能上存在一定的相似性,导致许多人在实际应用容易混淆。本文将对延时
    的头像 发表于 05-24 16:27 1260次阅读

    延时保险丝的工作原理 延时保险丝和普通保险丝的区别

    延时保险丝的工作原理 延时保险丝和普通保险丝的区别  延时保险丝是一种常见的电子元件,广泛应用于各种电子设备。它的主要作用是在电流突然超过
    的头像 发表于 03-05 17:06 5429次阅读

    时间继电器通电延时与断电延时区别

    时间继电器通电延时与断电延时区别  时间继电器是一种常用的控制设备,可用于各种延时应用。常见的时间继电器主要包括通电延时继电器和断电
    的头像 发表于 02-04 13:43 4667次阅读

    延时继电器工作原理 延时继电器的接法和用途

    延时继电器是一种常用的电子设备,它能够延迟触发继电器的动作,从而在威廉希尔官方网站 中产生一定的延时效果。它在工业自动化控制、电气设备保护、通信系统和家庭电器控制等领域中广泛应用。 一、延时继电器的工作原理
    的头像 发表于 01-19 11:24 7391次阅读