当您的系统中有一个应该定期执行的任务时(例如,它需要每五毫秒读取一次传感器值),那么您就有一个对随机延迟敏感的系统 - 也称为“抖动” ”。当您的任务出现抖动时,它有时必须等待比其预期的睡眠时间更长的时间才能下一次激活。一些轻微的抖动通常没有问题,而且通常很难避免,但过度的抖动是另一回事。
(过度)抖动的明显症状可能与您在遭受cpu 饥饿、从一般迟缓到间歇性数据丢失甚至故障的系统中看到的非常相似。修复方法也很相似:确保正确设置任务优先级并避免长时间运行的高优先级任务。
首先要确保 rtos 配置为使用抢占式调度,以便操作系统可以在需要执行更高优先级的任务时抢占正在运行的任务。并确保 rtos 滴答率(rtos 定时器中断发生的频率)设置得足够高,因为这决定了系统调度程序的精确度。理想情况下,您希望两个连续 rtos 滴答之间的时间比系统中最频繁任务的周期时间短得多,并且理想情况下是这些周期的公约数。在实践中,rtos 滴答率可以在实时精度和 rtos 处理开销之间进行权衡,因为 rtos 滴答会占用一些处理器周期。在 32 位系统上,这种开销通常是微不足道的,但对于速度较慢的 8 位或 16 位 mcu,这种影响会更加明显。
永远不要禁用中断来保护代码中的关键部分,这一点很重要,因为这会禁用 rtos 以及我们刚刚讨论过的调度。相反,您可以使用互斥锁保护关键部分,或者更好的是,创建一个单独的任务来管理您需要保护的资源。
准确、抢先的 rtos 调度是减少抖动的关键,但即使这样,您也可能会遇到一些抖动。如果你发现干扰来自高优先级的任务,你可以考虑改变优先级。也可以微调所涉及任务的开始时间,使它们不再相互干扰。第三种选择是重组阻塞任务以减少在高优先级上花费的时间。
如果您发现抖动是由中断服务程序 (isr) 引起的,您最好的办法是尝试减少其在中断级别的执行时间。例如,这可以通过重构代码并将一些处理移至普通任务来实现。如果您的任务具有非常低的抖动容限,那么最后一种选择是重构任务本身;它对时间最关键的部分可以实现为在定时器中断上运行的 isr。
tracealyzer 在定位抖动方面非常有用。在上图中,x 轴是时间线,每个点代表特定任务的一次执行。y 值是自上次执行以来的时间(以毫秒为单位)。通常我们在任务激活之间有 5 毫秒,但从图中可以明显看出,我们有一次几乎是 7 毫秒,两次也有 6 毫秒。
为什么会有这些延误?该图无法回答这个问题,但它提供了指向我们应该更详细地跟踪执行以了解发生了什么的地方的指针。
格芯退出7nm军备竞赛,台积电独霸市场大获全胜
Zero Point Motion利用腔光力学大幅提高惯性传感精度
深度学习与缺陷检测中常用的性能指标及计算方法
降压-升压型DC/DC控制器电路设计精选
高性价比的电源适配器应用电路设计
RTOS调试的追踪抖动错误
工程师STM32单片机学习基础手记(4):用PWM实现荧火虫灯
新产品、新领域、新技术--众为兴全新主题亮相高交会电子展
电子系统数字电路的逻辑测试
液压比例阀工作原理_液压比例阀的特点
多参数水质分析仪概述、用途、原理及参数
一文揭秘C语言的void指针
光线强弱检测实验
如何在高共模电压下测量小差分电压
高性能单电源 ARM7 微控制器介绍
现代示波器和数字化仪的使用规则
三点一刻618狂欢大促 “口碑营销特惠包”直击企业营销痛点
小米6/一加5/努比亚Z17对比评测:小米6/一加5/努比亚Z17怎么样?谁才骁龙835王者?
超导体完全抗磁性
基于可编程控制器多谐振荡器的设计与分析