工程师,你好:
我使用的是DSP是6678,在TI提供的例子基础上自己修改了NDK和IPC都没有问题,把两个合起来老出问题,基本上都是Heap的问题,HeapMP和Heap我分别都例化了一个。IPC使用的HeapMP和单核时的Heap是不是不能同时使用?
Andy Yin1:
如sysbios user guide memory章节所述,有多种heap类型,但是都是可以同时存在,你说的heap问题,具体是什么,报了什么错误。
Shilei Geng:
回复 Andy Yin1:
感谢Andy的回答,经过最近的测试,情况如下:使用的IPC工程的模板是RTSC的基于MessageQ的多核工程,要实现的功能是0核与其他7个核的通信,起初没有问题,后来加了部分代码后出现问题,具体为:0核动态create了HeapBufMP,其他核通过HeapBufMP_open函数访问,有时会运行到HeapBufMP_open函数当中无法出来,却在一直停留在Idle Thread中。可能会是什么引起了以上问题?
另外,是不是IPC当中的Notify使用的是不是核间中断的机制?MessageQ使用的是什么原理呢?MessageQ与QMSS有没有关系?
Andy Yin1:
回复 Shilei Geng:
停留在idle中应该是ok的;如果是停留在HeapBufMP_open,看一下返回的status是什么值,确认HeapBufMP_create是成功的。
MessageQ底层是软件协议栈,底层使用的是IPC register发送核间中断通知,与QMSS硬件队列没有关系,messageQ软件协议栈可以在多个不同的硬件平台实现,只是底层占用资源及中断方式不一样。
Shilei Geng:
回复 Andy Yin1:
HeapBufMP_create是成功的,HeapBufMP_open函数被阻塞,得不到返回值。单步调试时发现的是在HeapBufMP_open中的NameServer_getUInt32函数进入了Idle中。由于使用的是TI的库函数,IPC文件夹下的源码与库版本不同,看不到库函数源码,无法准确的跟踪错误。
Andy Yin1:
回复 Shilei Geng:
可能是输入的heap name在name server中没有找到,确认一下heap open输入的heap name与之前创建的heap一致,另外源码都在IPC安装目录下可以找到。
Shilei Geng:
回复 Andy Yin1:
两个heap name是一样的,如果改成不一样应该是返回找不到的值,但现在也是被阻塞。之前是好的,稍微加些代码就不行了,很奇怪。源码的版本和库函数的版本不同,有些函数不太一样,只能看个大概,还不能单步调试。