如题请问下各位大神,rtt怎么获取剩余内存比如像是rtos的这个接口prvTaskCheckFreeStackSpace
查看更多
我试着去调用了list_memheap函数,发现
发现打印如下
有一个free命令,根据RT_USING_MEMHEAP_AS_HEAP是否设置会分别调用list_memheap或者list_mem。
你确认一下咯,看看是不是list_mem函数。
另外,rt提供了一个接口函数rt_memory_info,在mem.c中,符合你的需求。
rt_memory_info
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;}
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;
}
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部
大佬我冒昧问下max_used 和used 的区别? max_used表示最大的分配空间?
@我真不是我的电脳
三个数值分别是总空间,当前占用空间,历史最大占用空间。
总空间 - 当前占用 = 当前可用。
@lchnu 谢谢大哥💪
@lchnu 大佬不好意思我问一下,我在使用rt_malloc 分配内存后,使用rt_memory_info 看内存时,发现used 增加的数值不对,比如说,rt_malloc(1) used 增加了64 rt_malloc(100) used 增加了 128
@我真不是我的电脳
你要读一下rt_malloc的代码。
内部对于rt_malloc传入的数据要做最大值和最小值的判断,越限报错,小于最小值,则至少为MIN_SIZE_ALIGNED,宏展开后的数值是12;
对于Heap的管理,形成链表,涉及到Next,Prev节点,MAGIC Word等,还需要至少SIZEOF_STRUCT_MEM,宏展开后,也是12。
另外,还需要4字节对齐,内部也会额外增加一系列占用。
注,上述部分代码的说明,内存管理部分的设置为:没有使能“使能内存堆对象”,动态内存使用Small Memory Algorithm。
你可以对应自己的代码,查看如下链接:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/programming-manual/memory/memory
官方代码给出了详细解释,多看文档,多debug,祝顺利!
@lchnu 谢谢大哥
@lchnu 这个回答比较详细了,赞一个!👍