TI中文支持网
TI专业的中文技术问题搜集分享网站

关于MessageQ的几个问题

大家好,

我的工程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 failed

3. 实际上我是先修改了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中分配出来的。

谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 关于MessageQ的几个问题
分享到: 更多 (0)