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 访问的问题?

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

指针不是仅仅是一片内存的首地址吗?它怎么可以对正片内存都有作用呢,即每次都是物理内存去读取其值呢?

  • 默认情况下,所有GSx RAM都分配给CPU1。在CPU1代码中,您需要更改特定RAM块的GSxMSEL寄存器的配置,以将其分配给CPU2,然后只有CPU2可以对该RAM块具有写入/执行权限(允许读取)。这需要在从CPU1启动CPU2之前完成。

    关于CPU2写GSRAM,您可以参考

    uint16_t c2_r_w_array[256];   // mapped to GS1 of shared RAM owned by CPU02
    uint16_t c2_r_array[256];     // mapped to GS0 of shared RAM owned by CPU01
    #pragma DATA_SECTION(c2_r_array,"SHARERAMGS1");
    #pragma DATA_SECTION(c2_r_w_array,"SHARERAMGS0");
    
    
    //
    // Shared_Ram_dataWrite_c2 - Read data from c2_r_array written by CPU01 and
    //                           modify and write into c2_r_w_array
    //                           c2_r_array[0] is used to hold the multiplier
    //                           value.
    //
    void Shared_Ram_dataWrite_c2(void)
    {
        uint16_t index;
        uint16_t multiplier;
    
        multiplier = c2_r_array[0];
        c2_r_w_array[0] = multiplier;
    
        for(index = 1; index < 256; index ++)
        {
            c2_r_w_array[index] = multiplier*c2_r_array[index];
        }
    }