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 双核例程 RAM_management 疑问

CPU1中定义

uint16_t c1_r_array[256]; // mapped to GS0 of shared RAM owned by CPU02
uint16_t c1_r_w_array[256]; // mapped to GS1 of shared RAM owned by CPU01
#pragma DATA_SECTION(c1_r_array,"SHARERAMGS0");
#pragma DATA_SECTION(c1_r_w_array,"SHARERAMGS1");

CPU2中定义

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");

1.程序是如何保证CPU1中定义的 c1_r_array 和 CPU2中定义的c2_r_w_array   在GS0中是对应的同一个地址空间

2.如果说是按照顺序依次分配的话,如果我有多个数组需要共享,怎么保证一致性

  • Shared RAM regions are defined in both the CPU02 and CPU01 linker files.
    In this example GS0 and GS14 are assigned to/owned by CPU02. The remaining shared RAM regions are owned by CPU01.

    数据数组是通过命令#pragma DATA_SECTION()分配给全局共享RAM的

    另外您可以查看在link file内相关的设置,如例程内的2837xD_RAM_lnk_shared_cpu1/2837xD_RAM_lnk_shared_cpu2

    在例程中,sharemsg0 ram映射到cpu1RArray和cpu2RWArray,并且在应用程序中cpu2写入数组,而cpu1同步读取相同的数据。类似地将sharemsg1 ram映射到cpu2RArray和cpu1RWAArray,并在应用程序中cpu1写入数组,而cpu2同步读取相同的数据。cpu2读取数据cpu2RArray即sharemsg1,对其进行修改并写入cpu2RWArray即sharemsg0,而后者又由cpu1读取。
  • 嗯 这个我明白
    我有些不明白的是
    比如说
    sharemsg0 ram映射到cpu1RArray和cpu2RWArray
    sharemsg0 ram 在link文件中是映射到 RAMGS0 : origin = 0x00C000, length = 0x001000
    RAMGS0的起始地址是0x00C000,如果cpu1RArray在CPU1中映射到0x00C000,是如何保证cpu2RWArray在CPU2中也是映射到0x00C000,而不是0x00C100,0x00C200之类的