环境:
使用的设置:
"HC12MultilinkCyclonePro" → "设置..." → "调试选项" → "单步运行时禁用可屏蔽的 ISR" — 已启用。
描述:
在调试器中执行多次单步操作(单步或单步跳过)后,可屏蔽中断(CCR 中的 I 位)将被永久禁用。即使在继续执行(运行/运行)后,中断也不会恢复——它们会一直处于屏蔽状态,直到在 CCR 寄存器视图中手动清除 I 位。在 Windows 10 和 Windows 11 主机上使用 USB 多链路通用 BDM 接口的大内存模型中,这种行为始终可以重现。在其他项目设置完全相同的情况下,Cyclone Pro 界面未出现此问题,Banked 内存模型中也未出现此问题(或几乎未出现)。
目前使用的临时解决方案:
手动清除 CCR 寄存器视图中卡住的 I 位。
要求:
这是 USB Multilink Universal 固件/驱动程序与 CodeWarrior 5.1 在 S12X 内核上使用的单步仿真功能结合使用时已知的问题吗?对于此设备/接口组合上的中断驱动型大型模型项目,是否存在固定的 Multilink Universal 固件版本,或者推荐的替代工作流程?
谢谢
您好,
你看到的现象是真实的,你注意到的界面差异(Multilink Universal 受到影响,Cyclone Pro 不受影响)是一个有用的观察结果。让我根据所涉及的中断类型给你一些实际的指导,因为选项会有所不同。
对于基于定时器的中断
如果您的应用程序使用定时器溢出、输出比较或类似的由外设生成的中断,则实际上不需要“单步调试时禁用可屏蔽的 ISR”功能来在调试期间处理它们。大多数 S12X 定时器和外围模块都有一个 FRZ 位,当设备进入 BDM 活动模式时,该位会冻结模块,而 BDM 活动模式会在任何停止或单步执行期间自动发生。设置 FRZ 后,定时器在步进过程中停止计数,并且无法在步进之间产生中断。这种方法在硬件层面上是可行的,与调试器接口无关,是此类中断的更简洁的解决方案。
用于外部中断和键盘中断 (KBI)
这种情况在这方面比较有限。外部 IRQ 和 KBI 中断是异步外部信号,没有硬件冻结机制来阻止它们。BDM接口无法在硬件层面上抑制它们。“单步执行时禁用可屏蔽的 ISR”功能正是为了弥补这一缺陷而存在的,它通过在每个步骤期间使用 CCR I 位来屏蔽这些 ISR。
由于此功能在您的设置中无法使用 USB Multilink Universal 正确恢复 I 位,因此调试使用这些中断源的代码最可靠的选择是使用 Cyclone Pro,您已经确认它运行正常。
值得一试
如果您有 CodeWarrior 5.2 版本,也值得用它进行测试。该版本中调试器方面有一些更改,USB Multilink Universal 在大内存模型下的 I 位恢复行为可能会得到改进,但这不能保证。
希望这能帮助您更好地了解各种选择。
拉迪斯拉夫