如何在FreeRTOS上模拟堆栈溢出

问题描述 投票:2回答:2

我将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上模拟堆栈溢出的方法吗?

c embedded stack-overflow freertos
2个回答
0
投票

好像我找到了解决方案。您需要做的就是将一个线程的堆栈大小更改为非常低,然后程序转到vApplicationStackOverflowHook


0
投票

当正在运行的任务从运行状态换出时,将进行堆栈监视。

您的程序在退出运行状态之前,可能会达到一定的硬件内存限制(并生成HardFault)。因此,堆栈监视器永远不会运行。

因此,请在函数内进行OS调用,这将使任务退出运行状态。像延迟/睡眠或类似的东西。

© www.soinside.com 2019 - 2024. All rights reserved.