定义的外部变量#pragma DATA_SECTION(SucceedFlag, ".externalMEM"); int SucceedFlag[3]; 在core0上使用CACHE_wbL2( SucceedFlag,3*sizeof(int),CACHE_WAIT)将cache的数值存入DDR后,外部变量声明过了。在core1,core2,core3核上无法将SucceedFlag从DDR中读入cache,使用CACHE_invL2(SucceedFlag,3*sizeof(int),CACHE_WAIT)语句也不可以。
请问这个问题如何解决?
Allen35065:
无法读入是什么意思?访问不了还是值不对,如果值不对,那这三个核看到的值是一样的吗?你可以接仿真器看看这个具体地址。
另外多核同步的flag最好是放到非cache的区域会更方便些。
Zhao Yan1:
回复 Allen35065:
你好,我们用的是外部变量,DDR上的数据传过去啦,就是cache读不出来,该怎么解决呢?
hocodrecon:
回复 Andy Yin1:
我也与遇到了该问题,请问128B对齐是指128字节对齐吗,还有就是如何把memory设置成 non cacheable?
Zhao Yan1:
回复 Andy Yin1:
你好,如果改为non cacheable,标志位的数值是正确啦,但是以标志位为条件的判断从核的运行就会慢,也就是说从核会多运行的好多次上一个标志位数值的函数,请问怎么解决?感觉从核貌似好长时间才能意识到标志位数值的改变
Zhao Yan1:
回复 Andy Yin1:
从核从memory读入数据为什么很慢…我空跑了好长的时间才能读到?即使是改成non cache,也是同样的~~
定义成外部变量128B对齐是不是下面这样的?
#pragma DATA_SECTION(SucceedFlag, ".externalMEM");int SucceedFlag[3];//三个捕获成功标志#pragma DATA_ALIGN(SucceedFlag,CACHE_L2_LINESIZE);//128B对齐
还是下面这样的?
#pragma DATA_SECTION(SucceedFlag, ".externalMEM");int SucceedFlag[3*CACHE_L2_LINESIZE/sizeof(int)];//三个捕获成功标志#pragma DATA_ALIGN(SucceedFlag,CACHE_L2_LINESIZE);//128B对齐
Andy Yin1:
回复 Zhao Yan1:
各个DSP读写shared memory的效率是一样的,你说的读入数据很慢应该跟你的软件有关,把读数的代码发上来看看。
长度和地址都最好128byte对齐。
Zhao Yan1:
回复 Andy Yin1:
thank you!终于发现..还是自己的多个msgQ的时序搞错啦~~