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.

求助:28377D 双核 读写GSRAM 问题?

Other Parts Discussed in Thread: C2000WARE

我现在有个应用, 在双核同时开了RAMGS9 使用, CPU1 写入一些数据和标志位, CPU2 负责读入数据并清除标志位,但事实是CPU2 根本没法执行清除动作, 为何啊, 我哪里还需要进行特殊配置吗?

  • 您的CPU2是否可以正常启动运行?IPCBootCPU2是如何设置的?若是可以的话,请您给出相关代码?

    您也可以先参考下相关例程以及帖子

    C:\ti\c2000\C2000Ware_2_00_00_02\device_support\f2837xd\examples\dual\RAM_management

    e2e.ti.com/.../690370
  • CPU1, CPU2 都可以正常启动的, 就是只能CPU1 写,而CPU2 只能读,不能写;
    我看看你说的例程;
  • 看了内存,CPU1 写的GSRAM1, CPU2 写的是GSRAM0, 没有两个写同一片内存的?
    是不是双核就不能同时对同一个GSRAM 进行写操作,这感觉不科学啊;
  • 按照说明, 估计是要进行如下操作吧:
    MemCfgRegs.GSxACCPROT2.bit.CPUWRPROT_GS9 = 0;
  • 1 您是否在link file内给出了相关的设置,如例程内的2837xD_RAM_lnk_shared_cpu1/2837xD_RAM_lnk_shared_cpu2

    2 CPU2不能改变GSxMSEL寄存器,CPU2只能去读取。CPU1才能配置GSxMSEL寄存器

    //
    // Give Memory Access to GS0/ GS14 SARAM to CPU02
    //
        while( !(MemCfgRegs.GSxMSEL.bit.MSEL_GS0 &
                 MemCfgRegs.GSxMSEL.bit.MSEL_GS14))
        {
            EALLOW;
            MemCfgRegs.GSxMSEL.bit.MSEL_GS0 = 1;
            MemCfgRegs.GSxMSEL.bit.MSEL_GS14 = 1;
            EDIS;
        }
    

  • 不管我做不做这个操作, CPU2 都不能对GSRAM 执行写操作, 我的目标是同一个GSRAM ,CPU1/2 都能够读写!!

  • 现在我知道GSRAM 如果交给谁控制,他就可以写,另一个CPU 就只能读;
    但现在有个新问题,CPU1 获得了GSRAM 的写权限,CPU2 只能读,那么GSRAM 的内容就可能随时被CPU1 给改写掉,而我发现通过断点发现GSRAM 的内容跟我期望的一致,但我写的逻辑却不对,直到我申明一个volatile 的指针指向这片GSRAM,才能获得我期望的逻辑;
    我的疑问是通过volatile 的指针可以操作这一片内存吗?