天天看点

关于ITRAP中断问:是什么导致了非法 (ITRAP) 中断?问:如何调试 ITRAP?

The ITRAP Interrupt

问:是什么导致了非法 (ITRAP) 中断?

无效指令被解码(这包括无效寻址模式)。

操作码值 0x0000 被解码。 该操作码对应于 ITRAP0 指令。

操作码值 0xFFFF 被解码。 该操作码对应于 ITRAP1 指令。

32 位操作尝试使用@SP 寄存器寻址模式。

地址模式设置 AMODE=1 和 PAGE0=1 是非法组合。

问:如何调试 ITRAP?

ITRAP 通常是堆栈溢出或缓冲区溢出的标志。要快速查看它是否是堆栈,您可以使用已知值填充该区域,然后运行该应用程序。通过写这些地址,您将能够看到堆栈增长了多少。

本应用笔记提供了一种使用片上资源检测何时发生堆栈溢出的方法:TMS320C28x DSP (spra820) 上的在线堆栈溢出检测。

确保代码不会太接近有效内存块的末尾(后面跟着无效内存)。这在设备勘误表中进行了解释。[1]

确保如果有任何代码被加载到闪存并从 RAM 运行,则在调用该函数之前将其正确复制到 RAM。[2]

确保 CPU 没有预取到代码安全密码位置。

将返回指令插入 ISR。在此指令上设置断点,然后单步查看代码的来源。

另一种选择是查看堆栈。当您捕获非法指令陷阱时,寄存器会自动压入堆栈,包括返回地址。通过查看堆栈上的返回地址值,可以找出 ITRAP 发生的位置。

注:

[1]默认的cmd文件中已经帮我们屏蔽了该风险:

关于ITRAP中断问:是什么导致了非法 (ITRAP) 中断?问:如何调试 ITRAP?
关于ITRAP中断问:是什么导致了非法 (ITRAP) 中断?问:如何调试 ITRAP?

[2] 在工程中预定义宏:_FLASH

关于ITRAP中断问:是什么导致了非法 (ITRAP) 中断?问:如何调试 ITRAP?

继续阅读