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.

[参考译文] LP-CC2652RB:如何增加 TI-RTOS 项目's main.c 的堆栈大小?

Guru**** 2538930 points
Other Parts Discussed in Thread: CC2652RB

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1249320/lp-cc2652rb-how-to-increase-the-stack-size-of-ti-rtos-project-s-main-c

器件型号:LP-CC2652RB
主题中讨论的其他器件:CC2652RB

我现在在运行 CC2652RB 项目时会遇到堆栈溢出。 如何增加 main.c 和每个任务的堆栈大小? 对于 main.c 栈大小、我曾尝试在 ARM 链接器选项中设置--stack_size、但它似乎不起作用(无论我如何设置、.map 文件显示__stack_size 为1024)。 ProjectZero 示例项目没有其它文章建议编辑的.cfg 文件或链接器文件。 我该怎么办?

此外,增加应用程序堆栈大小是否像增加每个应用程序 C 文件中的#define 一样简单?

谢谢!

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

    尊敬的 Qinchen Gu:

    希望你好。  
    要找到您首先需要打开 project_zero 属性的 cmd 文件、请转到 build、arm linker、 找到文件搜索路径、在该路径下、我们将使用"sdk/"/examples/rtos/LP_CC2652RB/ble5stack/project_zero/tirtos7/ticlang 来访问路径、并将其粘贴至您的 SDK 位于文件中的位置后、我们将找到 cmd 文件(第二个映像)。 作为一项测试、当 STACK_SIZE (在.cmd 文件中、使用文本编辑器打开/编辑)设置为1024时、我们在.map 中得到00000400、但当我们将其加倍到2048时、我们得到00000800为_STACK_SIZE。

    您可以单独为每个任务配置堆栈大小、在下面的 project_zero 中找到代码片段。  

    例如、  

    void ProjectZero_createTask(void)
    {
        Task_Params taskParams;
    
        // Configure task
        Task_Params_init(&taskParams);
        taskParams.stack = appTaskStack;
        taskParams.stackSize = PZ_TASK_STACK_SIZE;
        taskParams.priority = PZ_TASK_PRIORITY;
    
        Task_construct(&pzTask, ProjectZero_taskFxn, &taskParams, NULL);
    }
     利用位于 project_zero 内的选项、您可以为任务大小定义 PZ_task_stack_size。  
    我希望这对您有所帮助。

    有关堆大小(这可能是导致您溢出的原因)的更多信息、请尝试查看"C:\ti_simplelink_cc13xx_cc26xx_sdk_7_10_01_23\source\ti\dmm\apps\common/tirtos"(或安装 SDK 的任何位置)中的 ble_relase.cfg 文件。 或者、 BLE 用户/迁移指南 对程序的功能提供了一些有用的见解(搜索"heap")。  

    如果增加 RTOS 和应用程序栈大小无法解决问题、请考虑监控堆使用情况并进行相应调整、祝您愉快。  

    谢谢。
    亚历克斯

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

    尊敬的 Alex:

    感谢您的详细回复! 我找到.cmd 文件并将其打开、然后找到以下与 STACK_SIZE 相关的行:

    /*******************************************************************************
     * Stack
     */
    
    /* Create global constant that points to top of stack */
    /* CCS: Change stack size under Project Properties    */
    __STACK_TOP = __stack + __STACK_SIZE;

    --symbol_map __TI_STACK_SIZE=__STACK_SIZE
    --symbol_map __TI_STACK_BASE=__stack

    它似乎不包含__STACK_SIZE 符号的显式定义。 第一个代码片段中的注释会让我返回到项目属性-> ARM 链接器设置。 但是、无论我将"Set C system stack size (--stack_size、-stack)"(在 Build -> Arm Linker -> Basic Options 下)设置为什么值、我在生成的映射文件中始终为__stack_size 获得0x400。 BTW、值最初是空白的、我同时尝试了1024和2048、这看起来根本不会影响构建。

    关于设置应用堆栈大小、如何验证其堆栈大小是否增加? 我正在观察内存分配的 SRAM 部分、其值似乎没有随应用程序堆栈大小的值而改变。

    谢谢!

    沁辰

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

    您好!

    在已打开的文件(.cmd 文件)中、使用 Ctrl+f 搜索堆栈大小、然后找到 --stack_size=1024 (它位于.cmd 文件的 CSS 链接器配置部分)、将--stack_size = 1024更改为另一个数字(例如2048)会更改映射文件堆栈大小。 确保先清理干净、然后重新编译工程、看看这是否会改变/影响您的映射文件堆栈大小。  

    在内存分配中、您可以找到 TaskStack (以及其他任务)、当我们将#define PZ_task_stack_size 更改为类似于4096的值时、内存分配会反映这一点。

    谢谢
    亚历克斯  

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

    谢谢您、Alex! 现在我终于可以更改堆栈大小。