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.

共享内存无法共享的问题,急!!!



EVM6678LE启动的时候需要由主核心初始化信号量和邮箱,初始化完成以后通过0xc0000共享内存的变量通知其他核心,奇怪的是,为何核心0完成初始化送出标识量并flush后,其他内核访问相同地址的内存,数据居然没有变化?但是核心0看到的共享地址数据已经更新了,我做了cache的flush和invalid操作,但仍然不起作用,请问专家,这是为何?

  • 在其他核通过memory查看共享数据,勾掉cache的选项,看是否数据有变化,如有变化就还是cache的问题,另外建议将这种变量定位为volatile。

  • 问题估计比单单cache操作还要复杂,程序代码使用DDR中的同一个拷贝,但是执行相同的函数时堆栈看起来已经全乱套了,看起来根本的问题还是多核心程序模型的问题。稍微调用一下LLD的库代码都会变得非常大,显然不能靠缩减代码挤进L2SRAM解决问题。解决这个问题的根本在于:是不是说每个核心都有一个MPAX?通过配置MPAX是不是可以达到相似代码不同堆栈的目的?有没有相应的例子?

  • 每个核的代码可以通过cmd指定stack的位置,即每个核可以共享代码,但是有不同的cmd文件进行编译生成不同的out文件。

  • 早期C64X多核改cmd可能是唯一的方法,c66可以通过配置使用同一个RTSC工程,一个cfg就可以解决问题,已经不再需要多个cmd了,偶终于搞定了这个问题,想想也是这个道理,那么多核心弄那么多工程,怎么可能转得开