【问题标题】:How to get stack width on FreeRTOS?如何在 FreeRTOS 上获得堆栈宽度?
【发布时间】:2015-07-14 14:08:01
【问题描述】:

我正在使用基于 FreeRTOS 的 SDK 为嵌入式平台进行开发。我需要用xTaskCreate创建一个任务,但是我不完全理解usStackDepth参数。 FreeRTOS 文档说:

任务堆栈的大小指定为堆栈可以容纳的变量数 - 而不是字节数。例如,如果堆栈为 16 位宽,并且 usStackDepth 定义为 100,则将分配 200 个字节用于堆栈存储。堆栈深度乘以堆栈宽度不得超过 size_t 类型变量可包含的最大值。

那么,我如何获得堆栈宽度?它依赖于平台吗?我的目标是 32 位 RISC 处理器 Xtensa lx106

【问题讨论】:

    标签: stack embedded freertos


    【解决方案1】:

    FreeRTOS 任务堆栈宽度取决于端口。查看 portmacro.h,您应该会找到 portSTACK_TYPE 的定义。

    如果您进一步研究 tasks.c(请记住您可以访问 FreeRTOS 源代码),您会发现堆栈分配的大小为 ( ( size_t ) usStackDepth ) * sizeof( StackType_t)。然后回到 portmacro.h,你会发现 StackType_t 的 typedef 与 portSTACK_TYPE 相同。

    【讨论】:

    • 是的,这是 FreeRTOS 的一大缺点。连同所有遗留的东西。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      对于 32 位机器,每个堆栈帧为 32 位或 4 字节宽。在分配 100 的 usStackDepth 时,实际上创建了 100 个堆栈帧,每个 4 字节宽。因此堆栈大小将是 4*100 = 400 字节。

      【讨论】:

        猜你喜欢
        • 2020-05-17
        • 2013-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多