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.

[参考译文] TMS320F28069:当在流上堆栈时、ISR 无效

Guru**** 2614265 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/695360/tms320f28069-illegal-isr-when-stack-over-flows

器件型号:TMS320F28069

大家好、

我遇到了有关非法 ISR 生成的问题。

我的堆栈初始化为 RAMM0 (.stack         :>RAMM0_1,  page = 1),当我的栈指针使用访问栈最大大小地址之外的存储器时,会触发非法 ISR。 但现在我已将堆栈更改为 RAML0 (.stack         :> RAML0,  page = 0),当堆栈溢出发生时,将不会生成非法 ISR,并且我的 progam 被卡住。

如果我将.cmd 文件中的栈从 RAMM0更改为 RAML0、会出现什么问题? 当堆栈指针从堆栈最大地址访问存储器时、我需要获取非法 ISR

此致、

Chandrakant Pal

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

    Chandrakant、

    它取决于堆栈之外的存储器中的内容。

    当您之前分配堆栈时、我想您已经使 M0和 M1存储器是连续的(来自您使用的段名)、因此您具有0x800字的堆栈空间、并且当溢出[SP]从外设帧0获取时、 导致操作码无效-可能来自无效返回地址。  这不是对堆栈溢出做出反应的可靠方法。

    现在您要将堆栈分配给 L0存储器、溢出将从可能包含有效数据的有效存储器中获取、具体取决于您在其中加载的内容。

    在该器件上处理堆栈溢出的最佳方法是使用内部硬件分析单元来检测接近堆栈末尾的内存范围内的[SP]访问。  在以下位置有一个包含代码的应用手册:

    此致、

    Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Richard、
    是的、当 RAMM0和 M1用于检查堆栈溢出以及 RAML0正在使用时、我尝试访问非法存储器、它正在获取合法存储器。 感谢你的答复

    此致、
    Chandrakant Pal