为什么 MPLAB X 与 RTOS 不兼容

Why is MPLAB X not compatible with RTOS

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

我还没有能够将这些很棒的故障排除工具集成到 RTOS 中。是否有刚刚被忽视的快速修复方法?或者两者之间有什么更基本的东西不冲突吗?

谢谢!

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

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

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

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

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

RTOS 在 IDE 中的集成最常见的情况是 IDE,RTOS 和编译器通常来自同一供应商;例如 Mentor Graphics Nucleus、WindRiver 的 VxWorks、QSSL 的 QNX、TI 的 CCS 和 DSP/BIOS 或 Keil 的 uVision 和 RTX; none 其中目标 PIC。 Xpress Logic 的 ThreadX 与 PIC32 的 MPLAB Harmony 集成。

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

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

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