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


      毫无疑问,当你开始在嵌入式开发中使用实时操作系统(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个错别字词库)

      可定制段前是否空格

      只需鼠标点击

      全傻瓜式操作

  • 相关阅读:
    python 线程池与队列简单应用
    Java中ArrayList集合中如何删除重复元素呢?
    QT DAY7
    docker login/logout 远程仓库登录认证删除
    8-5交换排序-快速排序
    LVGL界面卡顿优化总结
    关于python序列对象
    HarmonyOS 音频开发指导:使用 OpenSL ES 开发音频播放功能
    卫星结构。。。
    一文彻底搞懂ZAB算法,看这篇就够了!!!
  • 原文地址:https://blog.csdn.net/yueqian_edu/article/details/127926290