我如何通过freeRTOS中的进程获取内存使用情况

时间:2019-02-27 06:59:19

标签: linux memory freertos

众所周知,我们可以使用ps,top和vmstat之类的命令或读取伪文件系统/ proc来获取Linux进程当前使用的RAM。但是我如何在freeRTOS中获得相同的信息,而我们无法使用命令并且不存在文件系统。

1 个答案:

答案 0 :(得分:0)

首先,RTOS中没有进程上下文。在FreeRTOS中,有一些任务(类似于Linux中的线程),而一旦 Scheduler 启动,它们的主要上下文又会丢失。客户端在创建任务时配置每个任务占用的堆栈内存。

但是,一旦系统运行,您就可以使用以下API查询堆栈是否达到最大值。

uxTaskGetStackHighWaterMardk(TaskHandle_t task)

请参阅https://www.freertos.org/uxTaskGetStackHighWaterMark.html

请记住,INCLUDE_uxTaskGetStackHighWaterMark应该定义为1才能使用此功能。

对于堆内存,我假设您正在使用FreeRTOS堆分配策略之一(heap_1,heap_2等)。在这种情况下,如果您已全局覆盖malloc/free/new/new[]/delete/delete[]以使用FreeRTOS pvPortMalloc,则有一种方法可以注册一个钩子函数,该钩子函数在系统用尽堆时被调用。

引用https://www.freertos.org/a00016.html

同时,可以使用以下API从调度程序中检索运行时状态。

void vTaskGetRunTimeStats( char *pcWriteBuffer );

当然,这会经常挂起/取消挂起调度程序,因此,这不是真正的生产代码解决方案,但仍然是很好的调试辅助。

引用https://www.freertos.org/rtos-run-time-stats.html