我将CubeMX STM32配置为使用FreeRTOS堆栈溢出监视。现在,我想测试一下它实际上是否有效。我尝试了一些简单的操作,例如在其中一个线程中执行以下函数
`// C program to demonstrate stack overflow
// by creating a non-terminating recursive
// function.
void fun(int x)
{
if (x == 1)
return;
x = 6;
fun(x);
}
int x = 5;
fun(x);
但是我得到了HardFault。
您知道在FreeRTOS上模拟堆栈溢出的方法吗?
好像我找到了解决方案。您需要做的就是将一个线程的堆栈大小更改为非常低,然后程序转到vApplicationStackOverflowHook
当正在运行的任务从运行状态换出时,将进行堆栈监视。
您的程序在退出运行状态之前,可能会达到一定的硬件内存限制(并生成HardFault)。因此,堆栈监视器永远不会运行。
因此,请在函数内进行OS调用,这将使任务退出运行状态。像延迟/睡眠或类似的东西。