使用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 =