// 定义空的 vApplicationStackOverflowHook void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) { // 空实现 while(1); } // 定义空的 vApplicationIdleHook void vApplicationIdleHook(void) { // 空实现 } // 定义空的 vApplicationTickHook void vApplicationTickHook(void) { ...
* @retval None*/voidvApplicationStackOverflowHook( TaskHandle_t xTask, signedchar*pcTaskName ) {while(1) { printf("task %s is stack overflow. \r\n", pcTaskName); vTaskDelay(500); } } 测试每个任务的堆栈大小: /** * @brief check all task stack and get the remain stack size. * ...
1、任务的栈资源(创建任务分配的资源,单位是4字节)来自configTOTAL_HEAP_SIZE定义的堆,如果任务栈总量超过 configTOTAL_HEAP_SIZE,任务创建失败; 2、如果在某个任务运行中,某个函数导致栈总量超过创建任务时分配的栈空间大小,会调用void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName )这个函...
* @brief if task overflow, it will run here. * @param [IN]task handle. * @param [IN]task name string pointer. * @retval None */ void vApplicationStackOverflowHook( TaskHandle_t xTask, signed char *pcTaskName ) { while(1) { printf("task %s is stack overflow. \r\n", pcTaskNa...
选中以后生成的代码,多了一个vApplicationStackOverflowHook函数,直接在里面打印溢出的任务名,如下图: /* Hook prototypes */voidvApplicationStackOverflowHook(xTaskHandlexTask,signedchar*pcTaskName);/* USER CODE BEGIN 4 */__weakvoidvApplicationStackOverflowHook(xTaskHandlexTask,signedchar*pcTaskName){/...
Stack Overflow Hook函数:栈溢出时调用。 Daemon Task Hook函数:软定时器守护任务调用的回调函数。 编码标准与命名规范 FreeRTOS遵从MISRA的编码标准,有一套自己的命名规范,可以参考对应文档。FreeRTOS为了最大化各平台的兼容性,没有采用C99标准以后新引入的C特性。
可以在堆栈溢出时自动调用,我们可以使用vApplicationStackOverflowHook()这个回调函数或者称钩子函数得知发生...
void vApplicationStackOverflowHook( TaskHandle_t xTask,signed char *pcTaskName ); 用户可以在钩子函数里面做一些处理。这种方法不能保证所有的栈溢出都能检测到。比如任务在执行的过程中出现过栈溢出。任务切换前栈指针又恢复到了正常水平,这种情况在任务切换的时候是检测不到的。又比如任务栈溢出后,把这部分栈...
函 数 名: vApplicationStackOverflowHook* 功能说明: 栈溢出的钩子函数* 形 参: xTask ...
建议加上FreeRTOS的vApplicationStackOverflowHook(),即便是MPU触发的,也方便你记录哪个任务崩了。