RTOS相对延时和绝对延时的区别

  发布时间:2025-11-05 06:21:56   作者:玩站小弟   我要评论
​嵌入式软件代码中延时是很常见的,只是延时种类有很多,看你用什么延时。一个延时的问题​问题:周期性固定一个时间)去处理某一件事情。你会通过什么方式去实现?比如:间隔10ms去采集传感器的数据,然后通过 。

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

一个延时的区别问题

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

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

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

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

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

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

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

本文拿FreeRTOS中相对延时函数vTaskDelay,服务器托管绝对延时函数vTaskDelayUntil来说明。

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

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

相对延时和绝对延时区别

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

相对延时代码:

绝对延时代码:

说明:

TestDelay这个延时函数仅仅用于测试(延时1ms),用于代替采集、算法、发送等耗时时间。两个代码唯一区别在于系统延时不同,一个vTaskDelay(10);,一个vTaskDelayUntil(&xLastWakeTime, 10);系统时钟频率为1000,也就是上面系统延时10个滴答,即10ms。

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

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

相对延时结果:

绝对延时结果:

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

换一种方式看区别

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

1. 相对延时

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

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

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

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

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

2. 绝对延时

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

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

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

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

  • Tag:

相关文章

  • 如何安装操作系统到硬盘电脑(从硬件准备到系统安装,轻松装机攻略)

    摘要:在购买一台全新的硬盘电脑后,第一步就是安装操作系统。本文将为大家详细介绍如何将操作系统安装到硬盘电脑中,从硬件准备到系统安装的全过程,帮助读者轻松完成装机任务。一、准备工作...
    2025-11-05
  • CISO不可忽视的十大物理安全措施

    过去,物理安全(企业人员和物理资产安全)主要由基础设施团队或CSO负责,但随着越来越多的物理安全系统与IT系统相连(涉及到IT资产的物理访问权限),物理网络空间交叉渗透的混合威胁快速增长,CISO在企
    2025-11-05
  • 陷阱,诱惑,小心蜜罐

    随着安全意识的提高,现在很多大公司或者企事业单位都配置有蜜罐系统,用来识别攻击,加强自身安全防御体系的建设。笔者前段时间对一些漏洞进行复现,也发现很多目标很容易拿到权限,但进入一看都是docker部署
    2025-11-05
  • linux 系统监控、诊断工具之 IO wait

    复制Procs进程) •r:运行队列中进程数量,这个值也可以判断是否需要增加CPU。长期大于1) •b:等待IO的进程数量,也就是处在非中断睡眠状态的进
    2025-11-05
  • oppo手机边充电边玩的危害与防范(揭秘oppo手机边充电边玩的危害以及如何正确使用)

    摘要:在现代社会,手机已经成为人们生活中必不可少的一部分。然而,为了满足人们对手机的持久使用需求,一些手机品牌推出了边充电边玩的功能,如oppo手机。这项功能让用户可以在手机正在充电的同...
    2025-11-05
  • 如何使用Docker Machine部署Swarm集群

    复制# curl -L https://github.com/docker/machine/releases/download/v0.2.0/docker-machine_linux-amd64 &g
    2025-11-05

最新评论