2412583_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2412583_zh-CN

2412583_zh-CN

CodeWarrior 5.1 调试器。“单步执行时禁用可屏蔽中断服务例程” 9S12XEQ512 上的 I 位永久置位

环境:

  • IDE:CodeWarrior 5.1(HC(S)12X 编译器)
  • 目标:MC9S12XEQ512
  • 总线时钟:49.777 MHz
  • BDM接口:使用USB Multilink Universal可复现;使用Cyclone Pro未观察到。
  • 主机操作系统:在Windows 10Windows 11上均观察到此问题
  • 内存模型:在大容量模型中可复现;在分块模型中不可复现(或复现能力大大降低)

使用的设置:
"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 固件版本,或者推荐的替代工作流程?

谢谢

Re: CodeWarrior 5.1 debugger. "Disable maskable ISR's when stepping" I-bit permanently set

您好,

你看到的现象是真实的,你注意到的界面差异(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 位恢复行为可能会得到改进,但这不能保证。

希望这能帮助您更好地了解各种选择。

拉迪斯拉夫

Tags (1)
No ratings
Version history
Last update:
Saturday
Updated by: