如何在 FreeRTOS 上获取堆栈宽度?

How to get stack width on FreeRTOS?

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

The size of the task stack specified as the number of variables the stack can hold - not the number of bytes. For example, if the stack is 16 bits wide and usStackDepth is defined as 100, 200 bytes will be allocated for stack storage. The stack depth multiplied by the stack width must not exceed the maximum value that can be contained in a variable of type size_t.

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

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

的定义

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

相同

我用以下信息更新了这个页面: http://www.freertos.org/FreeRTOS-Coding-Standard-and-Style-Guide.html#DataTypes

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