关于 RTT 堆栈的几个问题

发布于 2020-04-15 10:46:12
经过一段时间使用RTT,发现系统可以管理除已使用内存之外的所有内存作为heap。
通过查看初始化代码,在系统初始化里,将内部 RAM 的未使用部分全部注册为了heap。
同时若使用了 SDRAM 并开启了相关宏,则将 SDRAM 也会注册为系统 heap。

针对这里我有三个疑问:
1、内部RAM和SDRAM是否同时有效,即rt_malloc函数调用时,根据分配空间的大小,优先分配 RAM heap,不足的情况下分配 SDRAM heap。
还是说 SDRAM heap注册后,RAM heap就无效了。
(之前稍微实验过,ram heap够的情况下,sdram heap可用空间没减少。不知道是不是真的如此)。
2、如果不调用 rt_malloc函数,直接使用c库的malloc,或者c++的new,是在启动文件中定义的 HEAP 里分配空间,还是在 RTT 的 heap 里分配。
(之前也稍微实验过,C++ 的 new 稍微大一点,就死机了。个人猜测是因为分配的是启动文件定义的 HEAP,其空间只有0x400,太小)
3、如果要使用C++的new,要怎么操作,在env中开启C++支持就可以了,还是有其他操作,或者不能使用new,只能使用 rt_malloc?

有知道的大虾还望指教一二。:D


查看更多

关注者
0
被浏览
333
6 个回答
天狼八部
天狼八部 2020-04-20
自己顶一个,置顶一下。:D
UUUX_7686
UUUX_7686 2020-04-22
支持newlib的话,堆空间由RTT管理,即使调用malloc,最终调用的还是rt_malloc,new当然也是如此了。
天狼八部
天狼八部 2020-04-22
UUUX_7686 发表于 2020-4-22 14:18
支持newlib的话,堆空间由RTT管理,即使调用malloc,最终调用的还是rt_malloc,new当然也是如此了。 ...


终于有大佬回复了,谢谢:D

但是newlib是什么,如何使用?请大佬赐教:D

UUUX_7686
UUUX_7686 2020-04-23
components/libc/compilers/newlib 看下代码
小半仙
小半仙 2020-04-24
这里应该是涉及到了多内存管理,可以通过内存堆注册接口将多块不连续内存注册到内存堆管理里面,实质就是一个链表。分配内存时会从链表的内存堆中开内存,一个内存堆不够,会找下一个内存堆。可以看一下rt_malloc接口的具体实现,比较清晰。
天狼八部
天狼八部 2020-05-04
UUUX_7686 发表于 2020-4-23 16:30
components/libc/compilers/newlib 看下代码


:handshake 多谢
Cold
Cold 2020-06-23
使用rt_malloc分配的空间在哪里应该是是初始化的时候指定的吧,rt_system_heap_init这个指定的地址就是rt_malloc时分配的空间吧

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友