关于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文件中已经帮我们屏蔽了该风险:

 

 

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

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值