freertos系统栈溢出检测机制简述

FreeRTOS通过uxTaskGetStackHighWaterMark()函数和configCHECK_FOR_STACK_OVERFLOW配置来检测栈溢出。方法1在任务上下文保存后检查栈指针,而方法2在任务创建时预置标记并检查。尽管这两种方法都有局限性,如可能错过两次上下文保存间的溢出,或栈末尾未使用的字节已溢出,但它们提供了有效的调试辅助手段。
摘要由CSDN通过智能技术生成

FreeRTOS 提供了多种特性来辅助跟踪调试栈相关的问题。

uxTaskGetStackHighWaterMark()函数

每个任务都独立维护自己的栈空间,栈空间总量在任务创建时进行设定。
uxTaskGetStackHighWaterMark() 主要用来查询指定任务的运行历史中,其栈空间还差
多少就要溢出。这个值被称为栈空间的”高水线(High Water Mark)”。

uxTaskGetStackHighWaterMark() API 函数原型如下:

unsigned portBASE_TYPE uxTaskGetStackHighWaterMark( xTaskHandle xTask);
参数名 描述
xTask 被查询任务的句柄——欲知如何获得任务句柄,详情请参见 API 函数xTaskCreate()的参数 pxCreatedTask。如果传入 NULL 句柄,则任务查询的是自身栈空间的高水线
返回值 任务栈空间的实际使用量会随着任务执行和中断处理过程上下浮动。uxTaskGetStackHighWaterMark()返回从任务启动执行开始的运行历史中,栈空间具有的最小剩余量。这
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值