如何确定使用 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?的主要内容,如果未能解决你的问题,请参考以下文章