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