RTOS调试的追踪抖动错误

嵌入式技术

1344人已加入

描述

当您的系统中有一个应该定期执行的任务时(例如,它需要每五毫秒读取一次传感器值),那么您就有一个对随机延迟敏感的系统 - 也称为“抖动” ”。当您的任务出现抖动时,它有时必须等待比其预期的睡眠时间更长的时间才能下一次激活。一些轻微的抖动通常没有问题,而且通常很难避免,但过度的抖动是另一回事。

(过度)抖动的明显症状可能与您在遭受CPU 饥饿、从一般迟缓到间歇性数据丢失甚至故障的系统中看到的非常相似。修复方法也很相似:确保正确设置任务优先级并避免长时间运行的高优先级任务。

首先要确保 RTOS 配置为使用抢占式调度,以便操作系统可以在需要执行更高优先级的任务时抢占正在运行的任务。并确保 RTOS 滴答率(RTOS 定时器中断发生的频率)设置得足够高,因为这决定了系统调度程序的精确度。理想情况下,您希望两个连续 RTOS 滴答之间的时间比系统中最频繁任务的周期时间短得多,并且理想情况下是这些周期的公约数。在实践中,RTOS 滴答率可以在实时精度和 RTOS 处理开销之间进行权衡,因为 RTOS 滴答会占用一些处理器周期。在 32 位系统上,这种开销通常是微不足道的,但对于速度较慢的 8 位或 16 位 MCU,这种影响会更加明显。

永远不要禁用中断来保护代码中的关键部分,这一点很重要,因为这会禁用 RTOS 以及我们刚刚讨论过的调度。相反,您可以使用互斥锁保护关键部分,或者更好的是,创建一个单独的任务来管理您需要保护的资源。

准确、抢先的 RTOS 调度是减少抖动的关键,但即使这样,您也可能会遇到一些抖动。如果你发现干扰来自高优先级的任务,你可以考虑改变优先级。也可以微调所涉及任务的开始时间,使它们不再相互干扰。第三种选择是重组阻塞任务以减少在高优先级上花费的时间。

如果您发现抖动是由中断服务程序 (ISR) 引起的,您最好的办法是尝试减少其在中断级别的执行时间。例如,这可以通过重构代码并将一些处理移至普通任务来实现。如果您的任务具有非常低的抖动容限,那么最后一种选择是重构任务本身;它对时间最关键的部分可以实现为在定时器中断上运行的 ISR。

RTOS

Tracealyzer 在定位抖动方面非常有用。在上图中,X 轴是时间线,每个点代表特定任务的一次执行。Y 值是自上次执行以来的时间(以毫秒为单位)。通常我们在任务激活之间有 5 毫秒,但从图中可以明显看出,我们有一次几乎是 7 毫秒,两次也有 6 毫秒。

为什么会有这些延误?该图无法回答这个问题,但它提供了指向我们应该更详细地跟踪执行以了解发生了什么的地方的指针。

审核编辑:郭婷

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分