我目前正在尝试调试在我们使用的 F28379D 芯片上为什么会发生 ITRAP。 以下是需要考虑的一些事项:
- 我按"Debug"按钮连续刷写 CPU1和 CPU2、因为这就是我设置调试配置的方法
- 将代码加载到两个内核上后、我按下 CPU1上的"恢复"按钮、然后在 CPU2上按下该按钮、并且在恢复 CPU2后立即在 CPU1上触发 ITRAP
- Debug 窗口显示 Interrupt_illegalOperationHandler()是被调用的特定 ITRAP
- 有趣的是 ITRAP 只发生一次。 我的意思是、如果按下 每个处理器的 CPU 重置/重新启动按钮、然后再次恢复 CPU1和 CPU2、则不会发生 ITRAP。 但是、如果我通过按下 STOP 按钮完全停止调试、并重新调试两个内核、则会再次发生调试。
- 《国际行动计划》是在最近的一项承诺中提出的,但是,我在该承诺中没有看到任何迹象表明《国际行动计划》是为什么发生的
- 我在启动时使用值填充堆栈、以便在发生 ITRAP 时观察堆栈内存、但是没有任何迹象表明堆栈溢出
- 我还尝试将 CPU1上的堆栈大小从2048增加到4096、但这无法解决问题
- 我怀疑它可能与记忆有关、 以前 工作的承诺(无 ITRAP)和错误承诺(ITRAP)之间的记忆差异如下:
- RAMLS0_1从2653增加到2680 (TI ramfunc)
- FLASHB 从8186增加到8192 (最大尺寸)
- FLASHD 从8189增加到8192 (最大尺寸)
- FLASHE 从10511增加到11637
- RAMGS0从2903增至3683
- 按照另一个论坛帖子中的建议,我尝试在 ESTOP0之后添加 return;语句;在 Interrupt_illegalOperationHandler()函数中,但由于某种原因,调试器跳过 return 并在 for (;){;}中继续永久循环
- 也许我在编辑错误的 driverlib 文件、我在 C:/ti/c2000/C200Ware_3_04_00_00/driverlib/f2837xd/driverlib 中修改了 interrupt.h
请告知我如何进一步调试此 ITRAP 条件。 谢谢!