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.

[参考译文] F28M35H52C:没有堆栈?

Guru**** 2390755 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/676347/f28m35h52c-no-stack

器件型号:F28M35H52C

你好。

我必须在 RAM 中放置一些段、为了在 RAM 中获得最大的空间、我开始减少其他段。 作为测试、我想了解堆栈有多小(仍然允许程序正常工作)、 而且令人惊讶的是、我发现我可以将它设置为0x0、程序仍然工作(并且我获得了与-stack=0x1000相同的结果)。

坦率地说,我无法理解这是怎么可能的。 可以有人给我解释一下吗?

随附.map (.txt)文件。

e2e.ti.com/.../0160.RAM_5F00_management_5F00_c28.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    用户好、
    从映射文件中、我可以看到堆栈被分配到 RAMM0区域(0x1A2)。 在 C28x 上、堆栈从低到高增长、因此只要0x1A2中的 RAM 不被应用程序的任何其他部分使用、您的应用程序就会运行。

    在闪存中分支到应用程序之前、引导 ROM 离开 SP 的默认 SP 值和器件复位时的默认 SP 值为0x400。 用户应用程序应将 SP 设置为分配给堆栈的 RAM。 这里、来自0x400的 RAMM1看起来是免费的、不会被应用的任何其他部分使用、因此您的应用将正常运行。

    要了解应用程序使用的确切堆栈大小、请尝试如下所示的操作。 我的意思是根据您的需要应用您的用例。

    1.>假设程序启动时的 SP 为0x400。
    2.>程序加载完成后、在程序启动之前、转到"Memore"窗口并填充堆栈存储器中的已知数据模式(如0xFOOD 或0xDEAD)(例如:0x400至0x800)。
    3.>现在只要运行应用程序、您就认为需要花费大量的代码执行时间、暂停应用程序或停止应用程序
    4.>转至内存窗口、检查仍有您填充的图案的最后一个地址

    这将告诉您应用程序使用多少内存进行堆栈。 此外、如果您的代码使用任何本地变量、假设它们已初始化为0、则您的应用程序可能会立即中断、因为您的栈现在已初始化为0xDEAD 而不是0x0。

    希望这对您有所帮助。


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