【问题标题】:Why is MPLAB X not compatible with RTOS为什么 MPLAB X 与 RTOS 不兼容
【发布时间】:2015-05-28 15:45:11
【问题描述】:

MPLABX 具有许多模拟功能、故障排除和错误测试功能,我在大学编写 C 代码时发现这些功能非常有用。现在我在工业界和系统更加复杂,实时操作系统(RTOS)似乎很常见。

我还不能将这些出色的故障排除工具与 RTOS 集成。是否有一个刚刚被忽视的快速修复?还是说这两者之间有什么更根本的东西?

谢谢!

【问题讨论】:

    标签: c rtos mplab


    【解决方案1】:

    没有什么可以阻止 MPLABX 中的 RTOS 开发,缺少任何集成功能并不妨碍使用 RTOS 库;毕竟它只是一个像其他图书馆一样的图书馆。然而,RTOS 确实意味着稍微复杂的运行时和调试环境,并且在大多数情况下,当您遇到断点时,所有线程都会暂停。

    您对 RTOS 集成有何期望?在提供这种整合的情况下,支持会有所不同;一些可能的功能包括:

    • 查看线程调用堆栈
    • 查看多线程状态,
    • 查看状态内核对象,
    • 线程感知调试和断点,
    • 每线程 CPU 负载统计
    • 线程执行和上下文切换的时序图。

    当 RTOS 产品来自第三方供应商时,RTOS 集成必须通过两个供应商之间的双边协议,或者 IDE 供应商为此目的提供了文档化的插件架构,并且RTOS 供应商或其他方已选择支持它。有许多 RTOS 供应商和许多 IDE - 选择两个一起工作而不是限制您对可能不太适合您的应用程序或目标的产品的选择。

    即使是具有某种程度的 RTOS 集成的 IDE 也很少实现线程级断点 - 它们需要内置到内核中的功能(在上下文切换上切换断点),而不仅仅是 IDE 或调试器。例如,VxWorks 支持这一点,但它不针对 PIC。

    当 IDE、RTOS 和编译器通常来自同一供应商时,IDE 中的 RTOS 集成最为常见;例如 Mentor Graphics Nucleus、WindRiver 的 VxWorks、QSSL 的 QNX、TI 的 CCS 和 DSP/BIOS 或 Keil 的 uVision 和 RTX;没有一个是针对PIC的。 Xpress Logic 的 ThreadX 与 MPLAB Harmony for PIC32 集成。

    大多数 RTOS / PIC 组合可能过于简单和小众,市场过于分散甚至无法打扰,老实说,您可能不会错过太多。

    不管 IDE 中的 RTOS 意识如何,您仍然可以期待正常的源代码级符号调试器功能,但只能看到当前线程的非静态局部变量;这并不像看起来那么严格;通过在线程交互的信号端和接收端使用断点,您可以在大多数情况下充分调试线程交互行为。

    【讨论】:

    • 非常有见地。我不知道 RTOS 和 IDE 必须在那个细节级别上协同工作。我希望能够使用位于“windows”选项卡中的通用 IDE 故障排除工具。有诸如变量、手表、调用堆栈、断点、秒表之类的东西,还有一个不需要硬件即可运行的模拟功能。据我了解,由于我们使用的 RTOS,这些都不可用。
    • @Gascon26 :我很惊讶,几乎可以肯定你是不正确的,你的问题不是你认为的那样。在这种情况下,您可能应该指定 RTOS 和 PIC 变体以获得更好的答案。我过去曾使用 MPLAB 进行 dsPIC/PIC24 开发,使用 CMX-Tiny+ and CMX-RTX 没有问题。调试器不需要了解该基本功能级别的 RTOS;符号表是相同的,并且局部变量的位置是相对于堆栈指针的,因此拥有多个线程堆栈不是问题。
    【解决方案2】:

    MPLABX 只是 IDE,问题在于编译器。 XC16 和 XC32 兼容一些流行的 RTOS,包括 FreeRTOS,但是,XC8 编译器无法处理复杂的 RTOS。它是一个非常有问题的编译器,无法从高级指针表达式生成有效的汇编代码。

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 2017-10-08
      • 2014-11-06
      • 1970-01-01
      • 2020-06-15
      • 2021-05-06
      • 2021-04-04
      • 2012-10-14
      • 2017-10-11
      相关资源
      最近更新 更多