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.

AM5728: SharedRegion between ARM and DSP

Part Number: AM5728

目标是在ARM/DSP之间,不用MessageQ,只用SharedRegion,(说是避免Notify的中断),使得ARM/DSP通信。

我 在DSP下,write_buff = Memory_alloc(SharedRegion_getHeap(0), EDMA_MAX_TRANS_SIZE, 256, NULL);

得到write_buff 为0x95162400,作为物理地址,写入特定的值,周期变化,然后调用

Cache_wb(0x95100000, 0x100000, Cache_Type_ALLD, true);
Cache_wait();
Task_sleep(10);

在Linux下使用shmem_open(), mmap(指定地址write_buff ,size, )来读共享内存,mmap()的返回类型定义成volatile

ptr = (volatile unsigned int* )mmap((void*)addr, SIZE, PROT_WRITE |PROT_READ, MAP_SHARED, shm_fd, 0);

得到的值不对,为全0,

请问是哪里出了问题?

  • 可能是由于缓存一致性的问题导致的。在ARM/DSP通信中,由于共享内存可能会存在缓存不一致的情况,因此需要在写入共享内存后进行缓存刷新操作。

    在DSP写入共享内存后,需要调用Cache_wb()函数来刷新缓存,确保数据被写入内存。然后调用Cache_wait()函数等待缓存刷新完成。

    在Linux中读取共享内存时,也需要考虑缓存一致性的问题。可以尝试在mmap()函数后调用Cache_inv()函数来使得内存中的数据与共享内存中的数据一致。

    另外,还需要确保在DSP和Linux中使用的物理地址是一致的,以及共享内存的权限设置正确。