This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我目前正在尝试调试在我们使用的 F28379D 芯片上为什么会发生 ITRAP。 以下是需要考虑的一些事项:
请告知我如何进一步调试此 ITRAP 条件。 谢谢!
您好!
请参阅 "如何调试 ITRAP?" 部分中找到
https://software-dl.ti.com/C2000/docs/c28x_interrupt_faq/html/index.html
您可以尝试删除 Forever 循环并替换为 return、但在那里放置一个断点以进一步调试、如常见问题解答中所述。
您好、Nigel、
由于您已经验证堆栈不是问题、因此可能是其他一些事件。 请查看以下文档第3.6节"非法指令陷阱"部分。 其中包含了当内核 处于陷阱 ISR 中时、通过查看压入栈的内容来获取违规地址的相关信息。 这可能有助于弄清楚造成陷阱的原因。
https://www.ti.com/lit/ug/spru430f/spru430f.pdf
谢谢、
Ashwini
您好、Nigel、
只通过查看存储器就很难回答这个问题、因为 ISR 本身会有编译器生成的一些源代码、这些源代码会将内容推送到堆栈、而硬件自动执行的操作除外、如的表3-5所示 CPU 和指令集指南的前面部分。 如果没有该 ISR 代码信息、将无法反向跟踪栈并找到违规地址。
以下文章提供了更多详细信息、可帮助您反向跟踪堆栈并获取地址。
谢谢、
Ashwini
好的...我决定从最复杂的开始、简单地单步执行我们系统上的每个中断、以查看它是否触发了 ITRAP。 幸运的是、非法指令在我检查的第一个中断上被触发、这样我节省了大量调试时间。 不幸的是、似乎存在内存溢出...出于某种原因、结构内的函数回调会被错误的地址覆盖。 不用说,我已经把它缩小到不需要进一步援助的程度。