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.

[参考译文] CCS/TMS320F28377S:MCU 堆栈

Guru**** 2471180 points
Other Parts Discussed in Thread: TMS320F28377S

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/771364/ccs-tms320f28377s-mcu-stack

器件型号:TMS320F28377S

工具/软件:Code Composer Studio

大家好、

如果我想清除 MCU TMS320F28377S 中的堆栈存储器以避免堆栈过流问题、该怎么办。 如果可以的话

在运行时清除 MCU 的堆栈存储器、我该如何操作、请给出建议。


此致
Naveen

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

    Naveen、

    编译器维护堆栈以保存程序运行所需的数据。  随时使用的堆栈深度由[SP]寄存器指示。  您可以使用一些已定义的数据加载未使用的堆栈部分、但不能干扰程序正在使用的堆栈部分。

    您能否详细说明一下"清除堆栈"是什么意思?

    BTW、这里有一个有关检测堆栈溢出的应用手册、可能对此感兴趣:

    http://www.ti.com/lit/an/spra820/spra820.pdf

    此致、

    Richard

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

    谢谢'的回复。 很抱歉给您带来不便,请务必详细说明“清除堆栈”。 上周,我们遇到了与堆栈过流有关的问题, 当 MCU 执行一组 LCD 函数并延迟整个控制在"非法 ISR"中断中挂起和停止时,为了避免这种情况,我们增加了堆栈大小,这解决了问题,并且在多次 MCU 复位迭代后,控制从未在 ISR 中停止。

    但我的问题是,如果我在将来遇到同样的问题,并且通过增加堆栈大小,我的 RAM 内存会浪费哪些堆栈可能不需要? 因此、如果我可以在运行时控制堆栈大小并在软件中检测堆栈溢出情况、我想如果有任何"堆栈清除或复位"函数、用于在需要时清除堆栈。

    我已开始研究 spra820应用程序,但在更短的时间内无法轻松实现,同时请建议最简单的方法来重置堆栈内存。

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

    您好、Naveen、

    没有任何类似的东西可用。  捕获堆栈溢出的正确方法是使用仿真分析单元、如应用手册中所述。  一旦配置、就没有代码开销-如果发生溢出、您只会获得中断。

    在下面的线程中、我建议使用一种方法来填充堆栈已知数据、然后搜索堆栈活动的"高水位标记"、以指示分配了多少未使用的堆栈空间:

    代码是为 F28069编写的、但应在 F28377S 上工作。   

    此致、

    Richard

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

    您好 Richard、

    感谢您的回复和链接。 您共享的 ASM 文件、我如何使用和实施。 其中、我必须在源代码中调用这些 asm 函数、以及如何测试代码。 请建议。

    此致

    Naveen

       

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

    "您共享的 ASM 文件、我如何使用和实施。"
    -您可以添加头文件并将汇编文件添加到项目中。

    "我必须在源代码中调用这些 asm 函数的位置以及如何测试代码。"
    由你决定。 有一些函数可使用已知数据填充栈的未使用部分、然后读取未被过度写入的最高地址。 我想在到达 main()后立即填充栈,然后定期测量栈的使用情况并根据某些限制(例如)对其进行测试

    main(){
    fillStack (stack_fill);

    ...一些代码...

    I = getHighWaterMark (stack_fill);

    if (i > sume_limit){do _ating();}

    您可以在内存浏览器中查看堆栈、同时单步执行 C 代码以了解正在发生的情况。 我重复一下、我没有在 F2807x 上测试过这些器件、但我认为它们可以正常工作。 我只是提供这种方法作为建议、供您尝试。

    此致、

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

      您好 Richard、

    感谢您的回复和实施过程。 我们实施了堆栈溢出检测、在实施过程中遇到了一些问题、在这里、我将发送两个有关该问题的屏幕截图。 谢谢你。

    此致

    Naveen

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

    从以上内容中、我不太清楚您是否有单独的问题? 屏幕快照指示 IDE 问题,而不是设备问题。 如果您需要进一步的帮助、请告诉我。 谢谢。

    此致、

    Richard