如何确定使用 FreeRTOS xTaskCreate 创建单个任务所需的 Stackdepth?

Posted

技术标签:

【中文标题】如何确定使用 FreeRTOS xTaskCreate 创建单个任务所需的 Stackdepth?【英文标题】:How to determine Stackdepth required for individual task to create using FreeRTOS xTaskCreate? 【发布时间】:2021-12-15 05:30:02 【问题描述】:

我正在使用 FreeRTOS 在 STM32 MCU 上开发固件。

我可以使用哪些技术来确定使用 FreeRTOS xTaskCreate API 创建的单个任务所需的堆栈大小?

我知道这取决于单个任务完成的工作,但我需要知道如何找出附近的堆栈深度值,以确保我的任务在运行时不会出现任何堆栈溢出错误。

【问题讨论】:

你看过官方FAQ吗? 【参考方案1】:

最简单的方法是使用支持 FreeRTOS 的 IDE 插件,该插件会告诉您堆栈使用情况。如果做不到这一点,您可以计算它 - 或让 GCC 为您计算它 - 但我的偏好更实用一些。首先确保您定义了stack overflow hook,以防堆栈太小。然后分配一个您认为太大的堆栈,让代码通过假定的最高堆栈使用代码路径执行,然后调用uxStackGetHighWaterMark() 以查看实际使用了多少堆栈并进行相应调整 - 记住添加任何必要的无论可能的中断嵌套堆栈使用是什么。还可以使用uxTaskGetSystemStack()等更具侵入性的函数来查看所有任务的堆栈使用情况。

【讨论】:

以上是关于如何确定使用 FreeRTOS xTaskCreate 创建单个任务所需的 Stackdepth?的主要内容,如果未能解决你的问题,请参考以下文章

在 FreeRTOS 中使用字符串队列

FreeRTOS 任务栈大小确定及其溢出检测

FreeRTOS 任务栈大小确定及其溢出检测

一初识FreeRTOS之FreeRTOS简介

一初识FreeRTOS之FreeRTOS简介

如何使用cubemx 配置freertos,实时查看FreeRTOS任务列表和运行状态