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.
现在我知道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]; } }