《FreeRTOS的检测栈溢出一种方法》(uxTaskGetStackHighWaterMark())
来源:互联网 发布:淘宝卖保健品怎么样 编辑:程序博客网 时间:2024/06/04 00:30
为什么要栈检测
首先看我们创建每个任务使用者都是用自己的经验,这个任务大概占多大根据经验然后我们分配给它空间,但是任务栈空间的实际使用量会随着任务执行和中断处理过程上下浮动,所以FreeRTOS提供了一种检测栈剩余的接口。
注意事项
使用这个API首先要在FreeRTOS.h中打开uxTaskGetStackHighWaterMark
#ifndef INCLUDE_uxTaskGetStackHighWaterMark #define INCLUDE_uxTaskGetStackHighWaterMark 1#endif
检测栈剩余函数的介绍
uxTaskGetStackHighWaterMark()
unsigned portBASE_TYPE uxTaskGetStackHighWaterMark( xTaskHandle xTask );
参数名
xTask 被查询任务的句柄,如果传入 NULL 句柄,则是自己任务的栈剩余
返回值
返回从任务启动栈空间具有的最小剩余量这个值越是接近 0,说明这个任务快溢出了。
下面是官网的介绍
Parameters:xTask The handle of the task being queried. A task may query its own high water mark by passing NULL as the xTask parameter.Returns:The value returned is the high water mark in words (for example, on a 32 bit machine a return value of 1 would indicate that 4 bytes of stack were unused). If the return value is zero then the task has likely overflowed its stack. If the return value is close to zero then the task has come close to overflowing its stack.
使用的事例
可以用单独的一个任务去检测需要检测的任务 Main函数
int main(){ if(xTaskCreate(stack_overflow_cat, "stack_overflow_cat", 512, NULL,1, NULL) != pdPASS){ printf("[%s] stack_overflow error\n",__func__); } if(xTaskCreate(test_1, "test_1", 512, NULL,1,&pv_handle) != pdPASS){ printf("[%s] test_1 error\n",__func__); } vTaskStartScheduler(); for(;;);}
检测的函数和demo函数
static xTaskHandle pv_handle = NULL;void test_1(void *param){ printf("test_1 stack:%d\n",(int)uxTaskGetStackHighWaterMark(NULL)); for(;;) { /*各种操作*/ vTaskDelay(10000); } vTaskDelete( NULL );}void stack_overflow_cat(void *param){ for(;;) { printf("stack:%d\n",(int)uxTaskGetStackHighWaterMark(pv_handle)); vTaskDelay(500); } vTaskDelete( NULL );}
打印
statack:501 这个是test1刚进入的时候栈剩余stack:347stack:347stack:347stack:347stack:347stack:347
阅读全文
1 0
- 《FreeRTOS的检测栈溢出一种方法》(uxTaskGetStackHighWaterMark())
- 单片机栈溢出的一种检测方法
- 栈使用量的一种检测方法
- 第11章 FreeRTOS任务栈大小确定及其溢出检测
- VS_检测溢出方法
- 一种简单的SQL语法检测方法
- 一种语言/编码检测的复合方法
- 一种实用的笑脸检测方法
- 一种胡萝卜上部断裂的检测方法
- 一种基于中断的按键检测方法
- iOS 提供一种检测新版本的方法
- [经验] 一种基于FreeRTOS的CPU使用率测算方法及原理介绍
- 一种基于FreeRTOS的CPU使用率测算方法及原理介绍
- 【分析】一种小堆(heap)溢出的另类利用方法
- 一种小堆(heap)溢出的另类利用方法
- GCC4的高级功能--缓冲区溢出和栈溢出检测
- (编程基础)整数溢出的检测
- linux栈溢出检测
- rxjava2 + retrofit上传文件示例
- 学习三大框架Struts2 、 Hibernate 、 Spring时,涉及到三大框架的配置文件以及整合。
- repositoryItemButtonEdit1控件的按钮点击
- java IO基础 学习总结
- iOS仿keep5.3.0版本健身等级界面实现自定义UITableViewCell显示进度效果
- 《FreeRTOS的检测栈溢出一种方法》(uxTaskGetStackHighWaterMark())
- spark学习-62-Spark:Yarn-cluster和Yarn-client区别与联系
- [duyi]171221 try...catch | ES5严格模式
- Android Banner 简单实现
- kptr_restrict 来控制/proc/kallsyms 是否显示symbol的地址
- 今天是个好日子
- 模板方法模式
- Base64加密原理
- Scrapy修改下载图片名字