RTOS 堆栈溢出检测

方法1
在每次RTOS内核进行上下文的切换时,任务的堆栈可能会达到最大值。因此,内核检测堆栈指针(stack poiter)来判断当前堆栈是否溢出。

这种方法很快速,但是无法保证捕捉到所有的堆栈溢出。将configCHECK_FOR_STACK_OVERFLOW设置为1,使用这种检测方法。

方法2
这个方法比较有趣,在每个任务创建时,将它的堆栈用特定数值填充。因此,当堆栈没有溢出时,堆栈最后的内存数据应该始终是初始的填充值。freeRTOS通过检测堆栈的最后16个字节的数据是否发生改变,来确定堆栈是否溢出。

相比方法1,这个方法效率要低,但是仍然很快速。同样无法保证能捕捉到所有的堆栈溢出,例如溢出时,后16个字节覆写的就是填充值。

将configCHECK_FOR_STACK_OVERFLOW设置为2,将和方法1一起使用,无法单独使用方法2。

posted @ 2022-03-10 14:14  咸菜白饭  阅读(44)  评论(0)    收藏  举报