网站建设与制作报价,深圳网站制作济南,女生千万别学市场营销,哪个网站可以做彩经专家文章目录 RT-Thread 堆内存 检查命令 free 实现及介绍rt_memory_info 函数验证 RT-Thread 堆内存 检查命令 free 实现及介绍
在RT-Thread系统中#xff0c;通常可以通过rt_memory_info函数获取当前的堆内存使用信息#xff0c;然后你可以包装这个函数来显示剩余的堆空间。rt… 文章目录 RT-Thread 堆内存 检查命令 free 实现及介绍rt_memory_info 函数验证 RT-Thread 堆内存 检查命令 free 实现及介绍
在RT-Thread系统中通常可以通过rt_memory_info函数获取当前的堆内存使用信息然后你可以包装这个函数来显示剩余的堆空间。rt_memory_info实现见 rt-thread/src/mem.c:
void rt_memory_info(rt_uint32_t *total,rt_uint32_t *used,rt_uint32_t *max_used)
{if (total ! RT_NULL)*total mem_size_aligned;if (used ! RT_NULL)*used used_mem;if (max_used ! RT_NULL)*max_used max_mem;
}rt-thread 中其实已经实现了cmd_free 函数可以使用这个函数来查看当前堆的使用情况
#ifdef RT_USING_HEAP
int cmd_free(int argc, char **argv)
{rt_uint32_t total 0, used 0, max_used 0;rt_memory_info(total, used, max_used);rt_kprintf(total : %d\n, total);rt_kprintf(used : %d\n, used);rt_kprintf(maximum : %d\n, max_used);return 0;
}
MSH_CMD_EXPORT_ALIAS(cmd_free, free, Show the memory usage in the system.);
#endif /* RT_USING_HEAP */所以在终端执行free 命令即可查看堆的使用情况
msh help
RT-Thread shell commands:
list - list all commands in system
list_timer - list timer in system
list_mempool - list memory pool in system
list_memheap - list memory heap in system
list_msgqueue - list message queue in system
list_mailbox - list mail box in system
list_mutex - list mutex in system
list_event - list event in system
list_sem - list semaphore in system
list_thread - list thread
version - show RT - Thread version information
clear - clear the terminal screen
hello - say hello world
free - Show the memory usage in the system.
ps - List threads in the system.
help - RT - Thread shell help.rt_memory_info 函数验证
如下实现了一个测试函数在函数开始的时候查看当前堆使用了多少然后再进行rt_malloc(1024) 之后再查看下堆使用了多少通过前后对比可以看出rt_memory_info函数获取的信息是否正确。
#include rtthread.h
#include pthread.h#define TEST_MALLOC_SIZE 1024static int mem_check_test(void)
{char *ptr RT_NULL;rt_uint32_t total 0, used_pre 0, max_used 0;rt_uint32_t used_next 0;rt_memory_info(total, used_pre, max_used);ptr (char *)rt_malloc(TEST_MALLOC_SIZE);if (ptr RT_NULL) {rt_kprintf(mem check test failed\n);return -RT_ENOMEM;}rt_memory_info(total, used_next, max_used);if ((used_next - used_pre) ! TEST_MALLOC_SIZE 16) {rt_kprintf(mem check test failed\nmem used_pre: %d, mem used_next:%d\n,used_pre, used_next);rt_free(ptr);return -RT_ERROR;}rt_kprintf(mem check test ok\n);rt_free(ptr);return RT_EOK;
}
INIT_APP_EXPORT(mem_check_test);关于free命令的本地测试如下 通过执行free命令之后可以看到一共有多少heap和已经使用了多少。
通常需要在跑完测试用例后不能影响heap的大小简单点说就是你的测试case不能导致内存泄露。