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.

[参考译文] CC2640R2F:CCS 堆栈分配/使用

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1395136/cc2640r2f-ccs-stack-allocation-usage

器件型号:CC2640R2F

工具与软件:

您好!

我正在尝试通过 CCS (版本12.7)确定一个项目分配和使用的堆栈大小。 这似乎引起了很多含糊。

点击已编译工程的"Memory Allocation"视图时、堆栈部分以1024个单元形式给出。

在检查"Stack Usage"视图时、函数的最大包含大小为400个单元。 将光标悬停在该条上会显示"400个单位(100%)使用"、这意味着堆栈是400个单位。

项目属性中的 Arm 链接器选项最初将 C 系统栈大小显示为256。 将此值增加到512并重新运行编译对"Stack Usage"视图或"Memory"视图的"Stack"部分中报告单元总数没有影响。

因此:

  • 这三个视图/控件如何关联在一起?为什么它们看起来不一致?
  • 堆栈使用情况视图报告的最大包含大小是否保证为所需的最大堆栈?
  • 如果需要、您应该如何增加堆栈大小?

此致、

杰米

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

    尊敬的 Jamie:

    您正在使用哪个项目?

    您是否查看过用户指南? 这可能会有所帮助、是与堆栈相关的内容: https://dev.ti.com/tirex/content/simplelink_cc2640r2_sdk_5_30_00_03/docs/ble5stack/ble_user_guide/html/ble-stack-5.x-guide/debugging-index.html?highlight=rov#viewing-the-system-stack

    谢谢!
    Toby

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

    尊敬的 Toby:

    该工程基于 blestack simple_peripheral_oad_onchip 示例。 我知道可以使用 ROV 查看运行时堆栈的使用情况、但我更想知道  CCS 中介绍的堆栈信息似乎存在内部不一致的情况。 此外、堆栈使用情况信息相对于动态检查的可靠性。

    此致、
    杰米

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

    感谢您的确认!

    我已通知一位在 BLE 项目分析/调试方面更有经验的同事。

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

    您好!

    感谢您的咨询。 我来看看这个示例、您能否确认这是最新的 SDK (5.30)?

    您是否了解过 TI-RTOS 对象查看器的堆栈使用情况? 查看每个任务的状态

    BR、

    David。

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

    尊敬的 David:

    是的、这是最新的(5.30) SDK。 如前所 述、我知道用于动态检查堆栈使用情况的 ROV 操作。 然而、该问题与 CCS 中显示的与堆栈相关的数字有关、以及它们为什么不一致。

    此致、
    杰米

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

    您好、Trackert、

    感谢您的耐心等待。 这更多地是一个与工具相关的问题。

    "Stack Usage"视图根据调用树静态分析和每个函数的堆栈使用情况显示程序将使用的最大堆栈。 而"Memory Allocation"视图显示链接器已为堆栈分配的存储器量。 因此、它们提供不同的信息。

    400值是应用程序的最大系统堆栈使用量或最坏情况深度(包括在该函数中以及从该函数中完成的所有调用)。 函数"...taskFxn0美元"显示400 (共400个)。 其中、400是最坏情况下以字节为单位的堆栈深度值、400也是系统的最大堆栈使用量。 您还可以看到所有其他任务都与最坏情况进行了比较、以获得百分比。 函数使用的栈数量由在该函数中定义而不是在链接器文件中定义的局部变量的组合大小决定。

    要修改总体堆栈使用情况、请在".cmd"文件中执行此操作、以搜索符号--stack_size =_____

    希望这有助于澄清意见。

    BR、

    David。

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

    尊敬的 David:

    感谢您的澄清。 我仍然认为"Stack Usage"视图的做法会产生误导。 如果我被告知 "400个单元使用(100%)"、然后我将2个单元添加到堆栈中、那么我预计会出现堆栈溢出情况、而不是 "402个单元使用(100%)"。

    您能解释一下为什么链接器设置中的 C 系统堆栈大小输入再次是不同的值、以及为什么更改它不起作用吗?

    此致、
    杰米

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

    您好、Trackert、

    在链接器命令文件".cmd"上定义的值将覆盖在链接器设置中定义的堆栈标志。 但这是因为命令行模式、如果您修改了顺序以使${flags} 位于末尾、那么您应该能够根据您设置的 GUI 值查看修改后的栈大小。

    命令行模式:${COMMAND}${OUTPUT_FLAG}${OUTPUT}${INPUTs}${FLAGS}  

    BR、

    David

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

    尊敬的 David:

    谢谢、我把这个问题标记为解决了、但我认为答案只是确认 CCS 变得一团糟。 您需要了解低级细节才能使用/解释 GUI、进而使 GUI 冗余。  

    我之前曾尝试过将实现移至命令行、但工具(尤其是 XDCtools)与 CCS 过于交织在一起、因而无法做到这一点。 也无法将 Theia 与 CC2640R2F 器件配合使用(我不知道 Theia 是否解决了这些问题)。  

    此致、
    杰米