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.
在pdk6678_1.1.2.5中有一个示例工程qmssIpcBenchmark_c6678(位置是c:\ti\pdk6678_1_1_2_5\packages\ti\transport\ipc\qmss\transports),实现功能是使用Qmss作为IPC的传输层进行核间通信。工程默认在MSMC中建立了8192个monolithic描述符用于传输。
在调试时发现,在cfg文件中将描述符数量减少(如变为64个),程序运行将出错。研究发现问题在于TransportQmss初始化过程中,有一个TransportQmss_Instance_Init()函数,其中调用Cppi_initDescriptor()将描述符初始化并放入freeQ中。这一过程由核0执行,执行后在CCS的Memory View中发现,描述符仅在L2D发生变化,在实际的MSMC中仍然部分为0。这导致其他核在这里将取到未经初始化的描述符,从而不能正常发送Message.
实际上即使描述符的个数仍然是8192,也有一定概率出现这个问题,减少描述符个数只是更明显暴露问题而已。
平台配置使用的是默认配置ti.platform.evm6678,L1D和L1P全部用作缓存,L2和MSMC全部用作SRAM,那么为什么还会出现数据未被写回的现象?如何解决这一问题?
1.描述符位于MSMCSRAM,所以理论上是需要维护cache的
2.使用TransportQmss作为IPC传输层时候cache一致性是由transportQmss模块提供的,无法修改库
3.该库没有做cache一致性维护,所以存在bug
http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/p/311613/1123530.aspx#1123530
IpcOverQmss确实存在Bug,希望将来能够尽快修复