项目大概是用MSP432通过UA2串口输出数据,想输出几M的图片,我用的DMA串口发送。我看现在一般是一次最大1024字节,所以想的分多包发送。先想试一试,一次发10K,发个10次,看能不能发出去。数据的形式用的CJSON,问题就出现在CJSON里面的malloc上。发的时候,开始第一包和第二包都没有问题,但是第三包就发不出去了,我一查,CJSON里面不是有malloc申请内存吗,返回是0。然后接着查的RAM,堆根本就没满,比如下面这个动态堆从0x20001810开始的,我第一个包和第二包动态申请内存之后返回的值就在0x20001880左右。内存申请失败主要有RAM不够和内存碎片原因,第一个RAM不够,我这才是堆的开头,肯定不存在堆满了的情况;那有可能就是内存碎片了,但是我看我后面还有大片大片的空间没有使用,这难道也是内存碎片了吗?不是太懂,希望有朋友能出来看看~谢谢~
PS:第一个图是RAM堆地址,第一包和第二包动态分配的首地址大概就在我划红线的地方;第二个图是栈的地址,当时也没有满;第三个图就是malloc返回失败的地方,给buffer申请的地址,前两次申请成功的时候就是第一个图我标红的附近,但是第三次突然就返回0了。
我看后面还有那么大片RAM,不像是内存不够和内存碎片啊,难道还要用个内存池?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
那请问如何看malloc的分配的空间呢?我这种情况是不是就是没有可分配的RAM了,找一个内存池可以解决吗?
一周热门 更多>