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.

关于C6678多核全局量的问题



硬件平台:C6678 评估板

我想设置一个全局量数据结构,每个core都有读的权限,每个core对自己负责的部分有写的权限。

请问:这个全局量我怎么配置,或者如何编写代码,才能多所有的core可见。

此数据结构不会被经常访问,但有4k的样子,是不是可以放在DDR中,由多个core进行共享,如果这样,如何对工程进行编写或设置?

如果可以请写个简单的例子,希望不吝赐教,万分感激。

  • Yu,

            您可以把这个变量放在DDR或者MSMC, 每个核的工程重复定义这个变量并通过cmd文件的memory将其放在相同的memory, 例如:

               cmd文件:

                     shared_DDR: o = 0x80000000  l = 0x01000000

                      .share_Var  > shared_DDR

             C文件用下面的语句将变量指定到.share_Var 段

              #pragma  DATA_SECTION( Var_name, .share_Var)

               多核共享数据要注意cache一致性维护的问题。 如果对cache的特性不了解,可以看sprugw0b.pdf。 或者将这个共享数据定义为non-cacheable

  • 按照您提供的方式,我把全局量放在了DDR中,并在写完数据后调用如下代码进行cache的一致性维护:

    CACHE_wbL1d(var_ptr,sizeofvar,CACHE_WAIT);

    CACHE_wbL2(var_ptr,sizeofvar,CACHE_WAIT);

    过后,我通过ccs的内存查看物理内存中的相应地址。里面依然是全零,并不是我写的值,好像是数据写回并没有成功。

    请确认,我写回的方式是否正确?谢谢。

  • Yu,

                  几点建议:

                  1    确保DDR工作正常

                   2    单核情况下,用CACHE_wbL2()可以把数据回写到DDR

                   3    多核情况下,core0回写数据,core1访问数据前,先做cache无效操作

  • 我如果使用的是c6678 中messageQ的demo的话,DDR3我自己是否需要进行初始化?

  • 不了解您指的是哪个demo程序,可以看一下代码看是否有DDR的初始化代码。 如果没有的话,可以用GEL文件来做初始化,也可以自己把相关代码加进去。