如何处理RTOS系统中的时序问题

毫无疑问,当您开始在开发中使用实时操作系统 (rtos) 时,会有一条学习曲线。您将在更高的抽象级别上工作,使用或多或少的并行任务而不仅仅是子例程,并且您将需要考虑您的任务应如何共享数据和处理器时间。您需要为这些任务分配运行时优先级,最好的解决方案是什么并不是很明显。最后但同样重要的是,您需要学习如何使用 rtos 本身,例如用于控制任务和在它们之间进行通信的配置和 api 函数。
一旦你掌握了所有这些并且你正在编写你的代码,就到了下一个学习曲线的时候了——你现在也必须学习如何调试你的代码。
调试 rtos 系统(通常使用抢占式多任务处理)与调试您自己编写所有代码的单线程“超级循环”系统有几个不同的原因,但我想说两个主要原因是
由于多个任务交互并竞争共享资源,软件行为可能会受到软件时序和 rtos 调度行为的影响,而在源代码中是不可见的。
您不再直接控制程序流程——任务切换可能随时随地发生。
这些问题真的没有办法解决。您将不得不处理它们,因为您必须信任操作系统来安排您的任务和管理计时器。一些任务切换可能是可预测的,因此是已知的,但通常您不知道它们会在程序流的哪个位置发生。随着系统中任务/线程数量的增加,组合的数量也在增加——可能存在大量可能的执行场景,具有不同的时间和执行顺序,其中大多数都可以正常工作。但是,您的一位客户报告了“噩梦错误”,只有在条件合适时才会出现,您无法重现。
下面的边栏列出了一些典型症状,如果您有与 rtos 相关的时序错误,您可能会看到这些症状。请注意,其中许多问题通常具有一定程度的随机性;问题有时会出现,但并非总是如此。
依赖于时间的错误很难重现或发现,尤其是因为大多数调试工具对多任务问题的支持很少。在我看来,大多数工具仍然专注于静态停止系统,而不是动态软件行为。相比之下,许多系统具有实时要求,并且无法停止调试。
rtos 相关时序错误的一些典型症状
任务可以单独工作,但不能作为一个完整的系统
性能缓慢
系统锁定,或有时停止响应
系统看起来很脆弱——微小的变化会导致奇怪的错误
输出时序的随机变化
有时数据损坏或输出错误
随机崩溃/硬故障
除了寻找症状之外,您当然应该使用您拥有的任何工具以及它们提供的工具来检查您的 rtos 和应用程序是否存在错误和不当行为。例如,您的 ide 可能支持在调试期间轻松检查 rtos 对象(有时通过插件),甚至可以分析任务的堆栈使用情况。rtos 可以让您在较高级别测量 cpu 使用率,让您了解每个任务平均需要多少 cpu 时间。一些调试器可以在系统执行时实时呈现变量(“实时监视”),尽管这可能不适合快速变化的变量。
如果您想查看应用程序和 rtos 内部实际发生的事情的可靠时间线,您需要能够在事件发生时记录事情的 rtos 感知跟踪,以及可以帮助您理解跟踪信息的工具。


替代水浸泡水法,气密性检测仪成产品防水测试首选方案
如何使用电流检测放大器,差分放大器测量智能设备的电池充电和放电电流
新冠疫情已彻底改变了航空航天行业
PIC16F系列单片机的ADC参考电压
TCL C12E即将上市:拥有硬核音画质的AI智能管家
如何处理RTOS系统中的时序问题
基于TOP244Y的12V新型本安电源的设计
设计师总结的VR设计中最为关键的六个原则
富士康美国建厂,障碍重重,
Marvell推出高成本效益的高性能ARMADA 8040网络社区开发板
国产机器人增长放缓 究竟哪些企业可以留到最后还未可知
如何预防PCBA焊接加工的虚焊和假焊缺陷问题呢
什么是二次设备?二次设备有哪些
基于Interbus总线在汽车工业控制系统中的应用
iPhone12全面加入5G美国运营商5G速度略高于4G
薄膜电容的特性参数是采购的关键
voc传感器相关属性详细介绍
毫米波雷达“勇闯”智能家居80%的无线市场
什么是摩擦电纳米发电机?
哪几芯提供poe交换机供电