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.

6678内存问题

1、调试环境下查看内存时有L1DCache选项,不选择的话,即使在操作中修改了共享内存区变量值,也不显示。但是gel中好像是把cache禁止了吧。不知道这是怎么回事?

2、多核程序中在共享内存区定义一全局变量,调试状态下查看内存地址,不同核(相同地址)显示的值不同。请问这是什么原因?所有核都选择了L1DCache选项。

3、我在跑IPC的例程时,Import  macro.ini文件,工程中并没有显示添加了ini文件。然后构建工程找到CSL目录,我怀疑是ini没有Import进去,请问怎么解决?

 

 

  • xiangzhong kong,

    您好!

    请问你使用的CCS版本?

  • Yu Liu,

    您好!

    我用的版本是ccs5.1

  • xiangzhong kong,

    您好!

    问题1:我的理解该选项只是通过颜色区别该区域是否被L1D cache。

    问题2:由于prefetch和cache机制的存在,不同核可能看到不同值。硬件不自动维护cache和prefetch buffer的一致性。

    问题3:CCS5.1发现的问题,CCS5.0.3没有。

          下面是该问题的两个建议:

          1. import之前删除所有存在的宏;

          2. 将micro.ini放在项目目录下。

  • Yu Liu,

    您好!

    问题1.LID Cache选项,选与不选,显示的内存值是不同的。

    问题2.调试时显示invalidate all cache,这是gel文件中把cache禁止了吧,不知道理解的对不对。但是又会出现问题1中出现的状况。这块感觉有点混乱,不是很明白。

  • xiangzhong kong,

    问题1应该是cache使能的。

    硬件配置文件应该关联CCS安装目录下的\ccsv5\ccs_base\emulation\boards\evmc6678l\gel\evmc6678l.gel。连接DSP核会有下面的输出。

    C66xx_0: GEL Output: Setup Cache...

    C66xx_0: GEL Output: L1P = 32K  

    C66xx_0: GEL Output: L1D = 32K  

    C66xx_0: GEL Output: L2 = ALL SRAM  

    C66xx_0: GEL Output: Setup Cache... Done.

    问题2这句话可能是你的程序输出,目的不是禁止cache而是将当前cache中的内容清空。之后cache会继续工作。

  • Yu Liu,

    您好!

    1、我也是关联的这个文件。但是我的输出是:

    C66xx_0: GEL Output: Invalidate Cache...

    C66xx_0: GEL Output: Invalidate all  Cache... Done.

    2、在MSMC共享内存空间,核0定义一全局变量。此时两个核显示的值相同。然后核0改变这个变量的值,核0查看该变量地址中值为改变后的值;但是核1中该地址的值却没有改变。

    这个问题该怎么解决呢?

  • xiangzhong kong,

    如果我们仔细看看gel文件,连接某个核在OnTargetConnect()中会设置cache。在OnPreFileLoaded()中会调用Invalidate_Cache();,目的是再程序刚运行时保证cache没有残留的内容。

    具体到问题2,涉及到cache和存储之间的一致性。需要在核0进行回写同时invalidate核1cache然后再读。另外也可以考虑通过MAR在多核共享的数据区不进行cache配置。MSMC还需要考虑prefetch buffer的影响。