gpt4 book ai didi

c++ - FreeRTOS STM32 链接器堆栈大小与任务堆栈大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:15:41 30 4
gpt4 key购买 nike

我在 STM32F103 上运行 FreeRTOS 并使用 IAR 工作台。我试图了解“链接器设置的一般堆栈大小”和“FreeRTOS 中每个任务的堆栈大小”之间的关系。例如,当 FreeRTOS 创建任务时,它是使用链接器定义的堆栈还是在空闲 RAM 中定义自己的堆栈?我正在尝试确定项目的堆栈大小。我知道我可以使用 waterMark 函数调用来确定每个任务的堆栈。想法?

最佳答案

首先您必须了解,当您在 FreeRTOS 内存(TCB 和堆栈)中创建任务时,此任务分配在 FreeRTOS 堆上,其大小在 FreeRTOSConfig.h 中定义。

链接器堆是 C 库堆,而不是 FreeRTOS 堆。链接器堆栈通常仅用于您的启动代码,在某些端口中,用于中断堆栈。它不被任何任务使用。

例如,假设您有一个基于 FreeRTOS 的系统,其中包含一个名为 DEMO 的自定义线程。您的堆布局可能类似于下面的架构。这张图给你的最重要的教训是每个任务堆栈都与链接器中定义的堆栈无关。任务堆栈分配在 FreeRTOS 堆上,这与我已经提到的链接器中定义的堆无关!

Example Heap Layout:

+-------------------+ <----------+
| | |
| FREE HEAP MEMORY | FREE SPACE
| | |
+-------------------+ <----------+
| TIMER TASK TCB | |
+-------------------+ |
| TIMER TASK STACK | |
+-------------------+ |
| IDLE TASK TCB | |
+-------------------+ |
| IDLE TASK STACK | ALLOCATED SPACE
+-------------------+ |
| DEMO TASK TCB | |
+-------------------+ |
| DEMO TASK STACK | |
+-------------------+ |
| MUTEXES, SETS ETC.| |
+-------------------+ <----------+

关于c++ - FreeRTOS STM32 链接器堆栈大小与任务堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33925322/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com