问题描述
我用 PIC 汇编语言编写了一些测试代码,我无意在实际的 PIC MCU 上运行这些代码,而是打算生成跟踪文件,以便以后可以使用单独的工具对其进行分析。因此,我需要一种在特定代码点永久停止模拟器的方法,而无需在那里手动设置断点。这样我就可以从代码中终止跟踪收集。
在 MPLAB 8.92 中,我使用这个简单的技巧来实现:“调用 $”命令。该指令简单地调用自身,迅速溢出堆栈,在 MPLAB 8.92 中,这会通过 CORE-E0001 消息停止模拟器。任务完成!
但是,当我迁移到 MPLAB X 5.25 时,我发现模拟器不再使用此技巧停止。即使我进入项目设置并指定模拟器应该在所有类型的警告消息上中断,它也不会停止。
那么,我做错了什么?在 MPLAB X 中使用 MCU 代码停止模拟器的最佳工作方式是什么?请不要建议使用显式断点,这是不切实际的,我实际上需要在数十个项目中设置数百个断点。
解决方法
在 MPLAB 中转到 Project Properties
。在 Categories
树中:选择 Simulator
,Options 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.