freertos定位问题常用调试信息(内存、任务、信号量)

本文介绍了在FreeRTOS中进行问题定位时常用的调试方法,包括查看堆栈情况、任务状态以及队列和信号量的使用情况。通过xPortGetFreeHeapSize等函数监控内存,uxTaskGetStackHighWaterMark检查任务堆栈溢出,vTaskList获取任务列表和状态,uxQueueMessagesWaiting和uxSemaphoreGetCount分别用于队列和信号量的检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用freertos 程序运行出现问题,有时需要输出一些信息辅助定位问题,整理了一下相关的调试接口。

堆栈情况查看

xPortGetFreeHeapSize
查看当前还有多少空闲内存,判断是否内存不够导致程序无法运行,这函数可以用来优化内存的使用情况。比如当所有内核对象都分配好后,执行此函数返回2000,那么configTOTAL_HEAP_SIZE就可减小2000。

size_t xPortGetFreeHeapSize( void )
{
   	
	return xFreeBytesRemaining;//返回单位为字节
}

xPortGetMinimumEverFreeHeapSize
返回:程序运行过程中,空闲内存容量的最小值。
注意:只有heap_4、heap_5支持此函数。

size_t xPortGetMinimumEverFreeHeapSize( void )
{
   
	return xMinimumEverFreeBytesRemaining;//返回单位为字节
}

uxTaskGetStackHighWaterMark( TaskHandle_t xTask )
检查任务从创建好到现在的历史剩余最小值,这个值越小说明任务堆栈溢出的可能性就越大!FreeRTOS 把这个历史剩余最小值叫做“高水位线”。

#if ( INCLUDE_uxTaskGetStackHighWaterMark == 1 )
UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask )//参数为要查询的任务,NULL时则查本任务
 {
   
 	TCB_t *pxTCB;
 	uint8_t *pucEndOfStack;
 	UBaseType_t uxReturn;
 	pxTCB = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值