在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,那么为什么还会出现数据未被写回的现象?如何解决这一问题?
Andy Yin1:
1. 描述符分配的memory取决于memory region的配置,如果描述符在LL2则配置时不需要手动刷cache,如果在SL2/DDR则需要手动刷cache;
2. 你这里说的修改描述符数量就会出问题,请将该问题描述清楚。
fei xiao1:
我也遇到相似的问题,不知道你解决没有,怎样解决的?
Boxue Li:
回复 Andy Yin1:
1.描述符位于MSMCSRAM,所以理论上是需要维护cache的
2.使用TransportQmss作为IPC传输层时候cache一致性是由transportQmss模块提供的,无法修改库
3.该库没有做cache一致性维护,所以存在bug
Boxue Li:
回复 fei xiao1:
没有解决,我认为TI提供的TransportQmss库有BUG,所以改用Shm的方法做IPC了