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

MessageQ

Hi,Ti engineers:

        最近在调试MessgeQ:core1创建msg并发给core0,core0接收数据并释放msg空间,在core0和core1上都是while操作,功能比较简单

        但是调试下来发现,如果core0或者core1上不添加printf()和Task_sleep()代码,core就会出现:

[C66xx_1] MessageQ_alloc failed,counter = 71
[C66xx_1] ti.sdo.ipc.heaps.HeapBufMP: line 619: E_noBlocksLeft: No more blocks left in buffer (handle = 0x803260, requested size = 32)
ti.sdo.ipc.MessageQ: line 383: assertion failure: A_invalidMsg: Invalid message
xdc.runtime.Error.raise: terminating execution

        如果添加了printf()和Task_sleep(),则连续拷机都很正常,

        请问messageQ的机制和printf与Task_sleep有关联或冲突么?还是在msg的收发过程中都必须要有延时?

        附件为调试代码。请Ti工程师帮助看看。谢谢。

Andy Yin1:

你这种测试有可能导致core1分配消息的速度快于消息的释放,在分配一定消息数量后导师消息堆栈耗尽。

chunlei gan:

回复 Andy Yin1:

请问哪有什么方法可以解决么?但是我也将Task_sleep(30)测试过,还是有错误,如果速度降下来的话,会影响传输效率。我想在等同的速度上完成相同的效果,能有其他什么方法可以解决么?

还是MessageQ必须要等待一部分时间?或者用printf做一次调度后才有时间去释放好?

Thomas Yang1:

最近在调试MessgeQ:core1创建msg并发给core0,core0接收数据并释放msg空间,在core0和core1上都是while操作,功能比较简单

不一定必须要延时,你只需要保证在创建新的MSG时有合适的资源就可以了,或者你把HEAP开大一些

chunlei gan:

回复 Thomas Yang1:

你好,

         因为MSMC有4M,我在cfg里全开了,然后每个msg的结构体为48个字节, 4×1024×1024 /48 = 87381个,我在

heapBufParams.numBlocks  =  60000,然后拷机,发现还是会出现以上的“no more blocks”问题。

         请问 Thomas Yang1所说的heap是堆的大小是否就是heapBuf的大小?还是其他的heap我都放在DDR上,空间都在32M以上,其他heap和MessageQ应该没有多大的关系吧?

user3508153:

回复 chunlei gan:

请问,具体怎么解决的啊,谢谢

Xinggen Qu:

你好 我是一名学生 最近在用MessageQ做6678的IPC 能否加QQ请教交流下 谢谢 我QQ365707458

赞(0)
未经允许不得转载:TI中文支持网 » MessageQ
分享到: 更多 (0)