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.

[参考译文] TMS320F28069M:由代码微小更改触发的非法 ISR 故障

Guru**** 1831610 points
Other Parts Discussed in Thread: MOTORWARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1309402/tms320f28069m-illegal-isr-faults-triggered-by-trivial-changes-in-code

器件型号:TMS320F28069M
主题中讨论的其他器件:MOTORWARE

当我向代码中添加注释并更改变量的名称时、我遇到了非法 ISR 故障。 我对几乎相同的代码可以触发一个代码感到困惑。 通过查看此电路板、我无法找到此问题的任何答案。

我正在运行 Motorware 应用程序、该应用程序与 instaspin 实验教程 pdf 中的实验13b 类似。

我将使用 SCI B 中断功能和 timer0中断功能。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    为了帮助我跟踪导致此情况的原因、我有几个问题。

    1. 您要更改其名称的哪些变量?
    2. 您要添加的注释在哪里(例如、哪个文件)?
    3. 您是否有机会查看 ITRAP 常见问题解答? 链接

    此致、
    杰森·奥斯博尔恩

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我有一个我自己的应用代码的文件夹、该文件夹名为"Source"。 其中有一个名为 motor-commands.c 的文件、我使用该文件执行电机移动。 我在该文件中添加了函数头。  

    我更改了标志变量的名称、我使用该名称来表示已执行完整移动。  

    我已经查看了 ITRAP 常见问题解答。 我检查了堆栈是否溢出、而且我从未遇到过任何溢出。

    在我从 timer0ISR 触发一个移动命令后、似乎很快就会触发非法 ISR。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    啊、我明白了。 感谢您澄清您使用的结构。

    • 要明确一点、ITRAP 是否仅在注释 和 变量名称已更改时触发、还是/或触发?
    • timer0ISR 和 SCI 中断是否已在 PIE 中正确注册?
    • 当您处于 ISR 中时、返回地址是什么? 是不是每次都是同一个地方?

    这也有助于执行全新编译和/或生成新的或临时工作区、在那里导入工程、然后查看问题是否仍然存在、目的是确保编译器方面一切正常。

    此致、
    杰森·奥斯博尔恩

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我做了一个干净的构建、制作了一个新的工作区、但没有工作、这是可以的、因为这将是一个便宜的解决方案。

    我没有逐个检查、但我会进行检查。

    我很确定所有中断都已正确注册、因为到目前为止、它们都按预期工作。 我将显示如下:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我认为工作区/干净构建可能不起作用-不过、定期检查很重要!

    对于中断、我注意到两点。 首先、CPU_IntNumber_1被用于定时器中断和 ADC 中断。 这是故意的吗? 第二、我在计时器中断中看到警告。 这是什么警告?

    此致、
    杰森·奥斯博尔恩

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现我的问题,这是我的全部错。 我制作了自己的自定义函数、用于将双精度型转换为字符串以打印到命令行。 我溢出缓冲区、该缓冲区覆盖了在函数调用期间压入栈的链接寄存器。  

    谢谢你的帮助,我学到了一个宝贵的教训,单元测试 lol