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