大家好,
我的工程cfg文件为
我是把MessageQ C6670 examples例程中的关于MessageQ的相关代码加入到我当前工程中的。
自己定义了Message如下
#define ARRAY_SIZE 4096 typedef struct MyMessg{ MessageQ_MsgHeader header; UInt8 var[ARRAY_SIZE]; }MyMsg;
遇到问题如下
1. 我设置HeapBufMP的blocksize时,如果设置大小为8192,则报如下错误;设置4096则不报错。
heapBufParams.blockSize= 4096; heapHandle = HeapBufMP_create(&heapBufParams);
想问的是,HeapBufMP的size是有什么来限制的?HeapBufMP不是在SharedRegion中的吗?我的cfg文件中SharedRegion设置如下
SharedRegion.setEntryMeta(0,{ base: 0x0C000000,len: 0x00010000,ownerProcId: 0,isValid: true,name: "sharemem",});
应该能够满足8192的HeapBufMP大小,为什么还会报错?
谢谢!
Andy Yin1:
可以指定heapBufMP分配memory的shareRegionID,在create heap handle时可以指定heapBufParams.regionId=0;指定shared region ID试试。另外在8192时报的错是什么。
Feng Jin:
回复 Andy Yin1:
Hi Andy,
1. 代码中我已经指定了regionID为0
HeapBufMP_Params_init(&heapBufParams); heapBufParams.regionId= 0; heapBufParams.name= HEAP_NAME; heapBufParams.numBlocks= 1; heapBufParams.blockSize= 4096; heapHandle = HeapBufMP_create(&heapBufParams); if (heapHandle == NULL) {System_abort("HeapBufMP_create failed\n" ); }2. 如果设置为8192,报错如下
ti.sdo.ipc.heaps.HeapMemMP: line 743: E_memory: Out of memory: handle=0x842bd8, size=8448 HeapBufMP_create failed3. 实际上我是先修改了C6670自带的工程,修改后,能够设置blocksize大小为8192。
然后,我把其中的MessageQ相关的代码移植到项目工程中后,就出现了设置bloacksize为8192报错的问题。
同时,我比较了MessageQ自带工程和我移植MessageQ后的项目工程中的cfg文件,发现没有什么区别。
所以我我就来这里请教了!
Andy Yin1:
回复 Feng Jin:
这个错误是在heapBufMP creat时上报的么,像是heap不够用,看看你的代码中其他地方还有没有对heap需求大的地方,可以先把heap size调大试试。
Feng Jin:
回复 Andy Yin1:
这个错误是在heapBufMP creat时上报的!
我的疑问点就是:
heapHandle = HeapBufMP_create(&heapBufParams);这句代码是从哪个Heap中申请空间的?
是BIOS.heapsize?
还是在
SharedRegion.setEntryMeta(0,{ base: 0x0C000000,len: 0x00010000,ownerProcId: 0,isValid: true,name: "sharemem",});定义的空间里面?
ruijie yang:
回复 Feng Jin:
同问!
我在sharedregion中定义base为msmc的地址,但是我%x打印heapHandle,地址且并不在sharedRegion定义的地址中,create时指明了region=0;但我看文档中说明,HeapBufMP_create就是应该从sharedregion中分配出来的。
谢谢!