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.

[参考译文] TMS320F28386D:堆栈使用

Guru**** 2448780 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1281957/tms320f28386d-stack-usage

器件型号:TMS320F28386D

TI 是否具有堆栈使用文档?

什么是异型和包型尺寸的计算逻辑?

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

    您好!

    您可以 在 CCS 参考中参阅"Stack Usage"视图:

    • 为  专有大小  是该函数所需的堆栈数量、忽略它可能调用的任何函数。
    • 为  包容尺寸  是该函数所需的堆栈数量、加上该函数调用的所有函数所需的堆栈数量、递归应用。

    此致、

    阿米尔·奥马尔

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

    视图中显示的大小值以字节为单位。

    但我检查了它、大小值似乎是以字为单位。(16位)

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

    我使用以下示例验证大小值。

    erad_ex3_stack_overflow_detect

    当发生栈溢出时、函数 CallCount 为249。

    _TI_STACK_END 为0x7F8

    CMD 文件:

    .stack:> RAMM1

    RAMM1:origin = 0x000400,length = 0x0003F8 /*片上 RAM 块 M1 */

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

    似乎无法 更改在"Stack Usage"视图中显示数据的格式、 无法根据我看到的内容进行任何编辑、而且 TI 在线也没有提供有关如何执行此操作的说明。 这可能只是您必须牢记的内容(即将值除以2以了解 堆栈需要多少个字)。

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

    否、我的意思是实际的堆栈使用量是字(16位)而不是字节(8位)

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

    我不确定我是否理解、因此 Stack Usage 视图是文字、但您需要字节? 或者字节值显示在别的什么位置呢?

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

    TI 文档指出  视图中显示的大小值以字节为单位。

    但在上面的示例中我提到了.i 的计算方法、大小值应该是字(16位)。

    我想 TI 的文档给出了错误的信息。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    但是我检查了它,它似乎大小值是文字。(16bits)

    我认为在 C2000上、char = byte = 16位?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 C2000上、我认为 char = byte = 16位?

    就它们的存储方式而言、是的。 即使变量只有8位、它也会存储在16位位置、因为地址可以按字寻址。 尽管这可能会让用户感到困惑、但并非所有器件都可按字寻址。

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

    我想从技术上讲、文档是正确的、它仍以字节(16位)为单位显示值? 我是否会产生误解?

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

    字节始终为8位、但它存储在 C2000器件上的方式是位于16位位置。  C2000使用可按字寻址的存储器、而不是按字节寻址的存储器。

    这里的问题是、Stack Usage 视图显示使用的存储器位置数或使用的字节数、因为对于我们的器件而言、 这些位置是不同的。

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

    我一直对 C2000感到困惑。 我总是参考这份文档:

    https://software-dl.ti.com/ccs/esd/documents/c2000_byte-accesses-with-the-c28x-cpu.html#:~:text=A%20byte%20is%20defined%20as,it%20refers%20to%2016%20bits

    "一个字节被定义为能够在任何指定机器上保存一个字符的数据单元。 因此、如果在 C2000上使用术语"字节"、则它指的是16位。 总之:TMS320C28x 字节和字是等效的(16位)。"

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

    我同意、该文档令人困惑;就客户提出的问题而言、我认为更多的是8位内存位置、就像传统字节一样。 我不确定谁管理这个 html 页面、但应该改变一下。

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

    这确实令人困惑。 在搜索 E2E 时、我看到对此存在不同的观点、即使在 TI 人中也是如此。

    在任何情况下,回到原来的主题,我发现一个相关的讨论 ,以补充澄清。

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/866405/compiler-tms320f280049c-problem-with-stack-size