vApplicationStackOverflowHook :在任务切换时检测任务栈指针是否过界了,如果过界了,在任务切换的时候会触发栈溢出钩子函数。 FreeRTOS 的栈溢出检测机制 FreeRTOS 提供了两种栈溢出检测机制,这两种检测都是在任务切换时才会进行: ◆ 方法一在任务切换时检测任务栈指针是否过界了,如果过界了,在任务切换的时候会触发栈溢...
FreeRTOS栈溢出检测的工作原理主要基于两种机制: 机制一:检查栈指针位置: FreeRTOS在任务切换时检查当前任务的栈顶指针(pxTopOfStack)是否低于栈空间的最低地址(pxStack)加上一个保留区域(portSTACK_LIMIT_PADDING)。这个保留区域是为了防止栈指针恰好指向栈底时发生误判而设置的。如果栈顶指针低于这个界限,则认为发生...
FreeRTOS 的任务恢复 使用如下函数可以实现 FreeRTOS 的任务恢复: xTaskResume() 使用如下函数可以实现 FreeRTOS 的任务恢复(中断方式): xTaskResumeFromISR() 任务栈大小的确定 在基于 RTOS 的应用设计中,每个任务都需要自己的栈空间,应用不同,每个任务需要的栈大小也是 不同的。 将如下的几个选项简单...
freeRTOS检测栈溢出 将FreeRTOSConfig.h里面的configCHECK_FOR_STACK_OVERFLOW设置为2. 随便一个文件里,加入 #include"task.h"voidvApplicationStackOverflowHook( TaskHandle_t xTask,char*pcTaskName ){LogInfo("task: %s\n", pcTaskName); }
1.4.10 栈溢出检测 每个任务都有一个自己的堆栈,如果任务使用xTaskCreate()创建,则任务堆栈会自动从堆内存上创建。如果使用xTaskCreateStatic()创建,则堆栈由开发者自己确定并提供。堆栈溢出是影响系统稳定性的一个常见因素,freeRTOS提供两种可选的用于检测和纠正堆栈溢出的机制。使用配置选项configCHECK_FOR_STACK_...
又比如任务栈溢出后,把这部分栈区的数据修改了,这部分栈区的数据不重要或者暂时没有用到还好,但如果是重要数据被修改将直接导致系统进入硬件异常,这种情况下,栈溢出检测功能也是检测不到的。 使用方法一需要用户在 FreeRTOSConfig.h 文件中配置如下宏定义: ...
* 1. 学习FreeRTOS的任务栈溢出检测方法一(模拟栈溢出)。 * 2. FreeRTOS的任务栈溢出检测方法一说明: * a. FreeRTOSConfig.h文件中配置宏定义: * #define configCHECK_FOR_STACK_OVERFLOW 1 * b. 在任务切换时检测任务栈指针是否过界了,如果过界了,在任务切换的时候会触发栈溢出钩子函数。
* 1. 学习FreeRTOS的任务栈溢出检测方法一(模拟栈溢出)。 * 2. FreeRTOS的任务栈溢出检测方法一说明: * a. FreeRTOSConfig.h文件中配置宏定义: * #define configCHECK_FOR_STACK_OVERFLOW 1 * b. 在任务切换时检测任务栈指针是否过界了,如果过界了,在任务切换的时候会触发栈溢出钩子函数。 * void vApplica...