嵌入式开发:RTOS调试——处理计时问题

更新时间: 2022-11-18 14:11:34来源: 粤嵌教育浏览量:5696

  毫无疑问,当你开始在嵌入式开发中使用实时操作系统(RTOS)时,会有一个学习曲线。你将在更高的抽象层次上工作,使用或多或少的并行任务,而不仅仅是子例程,并且你需要考虑你的任务应该如何彼此共享数据和处理器时间。你需要为这些任务分配运行时优先级,而最佳解决方案并不明显。

  最后但同样重要的是,你需要学习如何使用RTOS本身,比如配置和用于控制任务和任务间通信的API函数。

  一旦你掌握了所有这些,并且你正在编写你的代码,是时候进入下一个学习曲线了——你现在也必须学习如何调试你的代码。

  调试RTOS系统(通常使用抢占式多任务处理)与调试单线程“超级循环”系统(所有代码都是你自己编写的)不同,这有几个原因,最重要的两个原因是:

  l 随着多个任务相互作用并争夺共享资源,软件行为可能会受到软件定时和RTOS调度行为的影响,而这在源代码中是不可见的。

  l 你不再直接控制程序流——任务开关可能在任何地方、任何时间触发。

  这些问题真的没有办法解决,你必须处理这些问题,因为你必须信任操作系统来安排任务和管理计时器。某些任务切换可能是可预测的,因此是已知的,但通常你不知道它们将在程序流中的何处发生。在嵌入式开发中,随着系统中任务/线程的数量增加,组合的数量也会增加——可能会有大量可能的执行场景,具有不同的时间和执行顺序,其中大多数都会正常工作。

  


  下面列出了一些典型的症状,如果你有RTOS相关的计时错误,你可能会看到这些症状。请注意,这些问题中的许多通常具有一定程度的随机性;这个问题有时会出现,但并不总是出现。

  与RTOS相关的计时错误的一些典型症状

  l 任务单独工作很好,但作为一个完整的系统就不行了

  l 缓慢的性能

  l 系统锁定,或者有时停止响应

  l 系统看起来很脆弱——微小的改变会导致奇怪的错误

  l 输出时序的随机变化

  l 有时损坏的数据,或错误的输出

  l 随机崩溃/硬故障

  依赖于时间的错误可能很难再现或发现,尤其是因为大多数调试工具对多任务问题几乎没有支持。在嵌入式开发中,大多数工具仍然专注于静态暂停系统,而不是动态软件行为。相比之下,许多系统都有实时要求,无法停止调试。

  除了寻找症状之外,你当然应该使用你拥有的任何工具及其提供的工具来检查RTOS和应用程序是否存在错误和不当行为。例如,IDE可能支持在调试期间(有时通过插件)轻松检查RTOS对象,甚至可以分析任务的堆栈使用情况。RTOS可以让你在较高的水平上测量CPU使用率,从而确定每个任务平均需要多少CPU时间。一些调试器可以在系统执行时实时显示变量(“实时观察”),尽管这可能不适合快速变化的变量。

  在嵌入式开发中,如果你想了解应用程序和RTOS内部实际发生的事情的可靠时间线,你需要一个能够感知RTOS的跟踪,在事情发生时记录下来,还需要一个工具来帮助你理解跟踪信息。

  站长帮手网(www.linkhelper.cn)

  文章格式化编辑

  繁简体相互转换

  文字挑错功能(1000个错别字词库)

  可定制段前是否空格

  只需鼠标点击

  全傻瓜式操作

免费预约试听课