我使用FreeRTOS在STM32单片机上开发固件。
我可以使用哪些技术来确定使用FreeRTOS xTaskCreate API创建的单个任务所需的堆栈大小?
我知道这取决于个别任务完成的工作,但我需要知道我如何才能找到附近的堆栈深度值,以确保我的任务在运行时没有任何堆栈溢出错误。
最简单的方法是使用FreeRTOS支持的IDE插件来告诉您堆栈的使用情况。如果做不到这一点,您可以计算它——或者让GCC为您计算它——但我更倾向于实用一点。首先确保定义了堆栈溢出钩子,以防堆栈太小。然后分配一个您认为太大的堆栈,让代码通过假定是堆栈使用率最高的代码路径执行,然后调用uxStackGetHighWaterMark()来查看实际使用了多少堆栈并进行相应调整——记住为可能的中断嵌套堆栈使用率添加任何必要的东西。您还可以使用更具侵入性的函数,如uxTaskGetSystemStack()来查看所有任务的堆栈使用情况。