从 MPLAB 8.92 到 MPLAB X 5.25:我现在如何以编程方式停止模拟器?

问题描述

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

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

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

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

解决方法

在 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.

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...