【问题标题】:From MPLAB 8.92 to MPLAB X 5.25: how do I programmatically halt the simulator now?从 MPLAB 8.92 到 MPLAB X 5.25:我现在如何以编程方式停止模拟器?
【发布时间】:2021-03-06 04:20:42
【问题描述】:

我用 PIC 汇编语言编写了一些测试代码,我无意在实际的 PIC MCU 上运行,而是为了生成跟踪文件,以便以后可以使用单独的工具对其进行分析。因此,我需要一种方法来在特定代码点中永久停止模拟器,而无需在此处手动设置断点。这样我就可以从代码中终止跟踪收集。

在 MPLAB 8.92 中,我使用了这个简单的技巧来实现这一点:“调用 $”命令。该指令只是简单地调用自身,迅速溢出堆栈,在 MPLAB 8.92 中,它通过 CORE-E0001 消息暂停了模拟器。任务完成!

但是,当我迁移到 MPLAB X 5.25 时,我发现模拟器不再使用这个技巧停止。即使我进入项目设置并指定模拟器应该中断所有类型的警告消息,它也不会停止。

那么,我做错了什么?在 MPLAB X 中使用 MCU 代码停止模拟器的最佳工作方式是什么?请不要建议使用显式断点,这是不切实际的,我确实需要在数十个项目中设置数百个断点。

【问题讨论】:

    标签: pic mplab mplab-5.45


    【解决方案1】:

    在 MPLAB 中转到 Project Properties。在Categories 树中:选择SimulatorOptions for Simulator 现在可见。在Options categories 下选择Warning Messages Break Options 并按下Unlock 按钮。

    假设您不会在 Watchdog Timer 重置事件时停止模拟。在列表中查找 W0004-CORE: Watchdog Timer has caused a Reset. 并将 Report 选项更改为 Break。 按Apply 按钮。 现在程序模拟将在每个Watchdog Timer 重置事件时停止。

    PS:我使用的是 MPLAB v5.35。对于堆栈溢出中断使用选项W0012-CORE: Device Resets on stack overflow.

    【讨论】:

    • 感谢您的回复!正如我在原始消息中提到的那样,我正是这样做的,但这并没有帮助。即使我将所有选项设置为“中断”(包括 W0012-CORE),它仍然不会在“调用 $”时中断。事实上,它甚至不会在控制台输出中报告堆栈溢出。所以看起来堆栈溢出永远不会被完全检测到。这是在 5.25 中。我现在希望它是 5.25 中的一个错误(因为您报告它在 5.35 中有效)。我会尝试 5.45,最新版本并会报告。
    • 不要将所有选项都设置为中断,因为对我来说这不起作用!更改选项时不要忘记按“应用”按钮!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    相关资源
    最近更新 更多