相信许多朋友都有过这么一个需求:固定一个时间(周期)去处理某一件事情。
比如:固定间隔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)。
如果打断时间太长,回来之后延时都超过了,则会立马执行程序,不会再延时(任务不会再阻塞延时)。
细数机器学习在金融领域的七大应用
IT基础设施建设需求扩大,2020年中国IT支出将达到20683.5亿元
量子通信在理论上是无条件安全的吗?
直流220V变成直流5V的两种方法
ios11发正式版:ios11正式版新功能有惊喜,iphone6升级后还能再用三年,苹果良心之作
FreeRTOS中相对延时与绝对延时的区别
中国联通通过美国联邦通信委员会及参议院审查
畅想未来的物联网生活
懂营销产品好的OPPO为什么会被贴负面标签
JDI发布透明指纹识别模块,可用于未来的智能手机
编码器的备用通道将全屋立体声音频嵌入卫星机顶盒设计中稳定且经济高效
360儿童手表8X评测 有着极高的性价比
厂界VOC气象站的功能有哪些?
三星或将扩充可折叠手机阵容
基于SparkFun的ESP8266 Thing Dev开发板构建温度传感器
携手共进,合作共赢--全志科技&OPEN AI LAB联合发布会圆满举行!
SpaceX向国际空间站发送组织芯片等科学物资
女王“价”到,51返呗携手oppo、vivo优惠惊爆3月
荣耀8青春版和荣耀V9同时发布,你知道该选谁了吗?
工控主板常见的定制内容都有哪些