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.
定义的外部变量#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)语句也不可以。
请问这个问题如何解决?
无法读入是什么意思?访问不了还是值不对,如果值不对,那这三个核看到的值是一样的吗?你可以接仿真器看看这个具体地址。
另外多核同步的flag最好是放到非cache的区域会更方便些。
你好,如果改为non cacheable,标志位的数值是正确啦,但是以标志位为条件的判断从核的运行就会慢,也就是说从核会多运行的好多次上一个标志位数值的函数,请问怎么解决?感觉从核貌似好长时间才能意识到标志位数值的改变
只是一个标志放在non cache并不会对代码的性能产生影响。
如果一定要设为cache enable,上面已经说了如何维护cache一致性保证数据的读写可靠。
设置为non cache的方法是配置相应的memory attribute寄存器中的相应bit,可查看corepac手册中关于MAR寄存器的描述,在STK中所以测试例子main函数入口都会对MAR进行配置。
STK:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx
从核从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对齐