This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于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大小,为什么还会报错?

谢谢!

  • 可以指定heapBufMP分配memory的shareRegionID,在create heap handle时可以指定heapBufParams.regionId=0;指定shared region ID试试。
    另外在8192时报的错是什么。

  • 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文件,发现没有什么区别。

    所以我我就来这里请教了!

  • 这个错误是在heapBufMP creat时上报的么,像是heap不够用,看看你的代码中其他地方还有没有对heap需求大的地方,可以先把heap size调大试试。

  • 这个错误是在heapBufMP creat时上报的!

    我的疑问点就是:

    heapHandle = HeapBufMP_create(&heapBufParams);这句代码是从哪个Heap中申请空间的?

    是BIOS.heapsize?

    还是在

    SharedRegion.setEntryMeta(0,
        { base: 0x0C000000,
          len: 0x00010000,
          ownerProcId: 0,
          isValid: true,
          name: "sharemem",
        });

    定义的空间里面?

  • 同问!

    我在sharedregion中定义base为msmc的地址,但是我%x打印heapHandle,地址且并不在sharedRegion定义的地址中,create时指明了region=0;但我看文档中说明,HeapBufMP_create就是应该从sharedregion中分配出来的。

    谢谢!