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.

多核之间如何共同维护一个变量



我尝试了在程序中定义一个全局变量var的方法,但是似乎两个核都各自会定义一个,var变成了实际上的非同一个变量。

我在定义var时加上了多线程编程时常用到的volatile关键字,情况依然如此。

然后我尝试加上了

CACHE_wbInvL1d((void *)(&var),4,CACHE_WAIT); CACHE_invL1d((void *)(&var),4,CACHE_WAIT);

但是依然是如此。

我想问一下,是不是如何才能定义出一个能够共同维护的变量?

请各位专家、大神不吝赐教!万分感激!

  • 你好,

    你可以尝试用下#pragma DATA_SECTION的语句

    例如

    你在.cmd文件中声明存储区域

    在MEMORY中添加

    data_core0     : org = 0x10820000,len = 0x00000100

    在sections中添加

    flag_data   >       data_core0

    在主函数中添加

    #pragma DATA_SECTION(flag,"flag_data");

    static volatile int flag;

    然后你就可以实现在工程中不同核对同一全局变量的操作

  • Yue Cao:

    你好,我尝试你一下你说的做法,但是还是不行。

    譬如我全局定义:

    #pragma DATA_SECTION(var,"flag_data");

    static volatile unsigned int var;

    然后我用核1改变var的值为10;使用了:

       var=10;  

       CACHE_wbInvL1d((void *)(&var),4,CACHE_WAIT);

    然后我再在核0输出var的值使用了:

       CACHE_invL1d((void *)(&var),4,CACHE_WAIT);

       printf("\nvar=%d",var);

    但是输出的值为0;

    请问这是什么原因?谢谢帮忙解答!

  • 你好,

    你要注意程序中0核对var的输出是在1核将var赋值之后发生的,要有时间上的顺序!不然可能是0核输出之后,才用1核对var赋的值,所以可能出现了你的那种情况!

  • 这个我之前的程序里,定义了全局变量,多核运行同样的程序。多核之间可以共享该变量,只是会分别cache到各个核的cache空间里,所以需要维护cache一致性的问题。建议单步调试下。