大家好,
我的环境:C6670, SYS/BIOS v6.33.6.50, IPC v1.24.4.32, XDC v3.23.4.60。
我目前的工程是4个Core用一个同样的工程,一个同样的cfg文件,生成一个同样的.out文件,只是在代码中用DNUM区分了每个Core的处理任务。
遇到的问题:
1. 工程中,每个Core都需要512KB的空间作为SRIO对外的收发缓冲空间。这样,则L2SRAM肯定放不下。
于是我把这个512KB的收发缓冲去load到MSMCSRAM中去了,生成了一个.out加载到4个Core中。
CMD文件中
.Tran_Receive_buffer: load >> MSMCSRAM
源代码中
#pragma DATA_SECTION (g_l1BBTx, ".Tran_Receive_buffer"); #pragma DATA_SECTION (g_l1BBRcv, ".Tran_Receive_buffer"); #pragma DATA_SECTION (g_dlTxModBuf, ".Tran_Receive_buffer"); #pragma DATA_SECTION (g_ulRcvBuf, ".Tran_Receive_buffer");
生成的.map文件中
0c0100000c0100000007b8a000000000rw-0c0100000c0100000007b8a000000000rw- .Tran_Receive_buffer
那么4个Core在运行时应该同时去操作这一个512KB的MSMCSRAM,可是运行时居然不冲突!感觉不合理,4个Core同时使用MSMCSRAM中的这一块512KB的缓冲区,每个Core的数据不应该会冲突吗?难道是因为目前我的代码并没有完全使用这512KB,只用了其中的10KB?
2. 而每个Core都要512KB,4个Core就要2MB,MSMCSRAM也放不下(MSMCSRAM放了代码段)。
那么,如下把 不同Core的这个512KB的缓冲区load到DDR3的不同区域中呢?是使用4个不同的CMD文件,生成4个不同的.out?有没有更简单的方法?
谢谢!!
Feng Jin:
回复 Andy Yin1:
你好, Andy!
1. 对于“多核同时操作同一块共享数据memory不会有问题”我还是有点疑问。
如果某个时刻Core0对这块Memory写数据0x01,Core0待会会读这块Memory。而在Core0读取之前,Core1把这块Memory写了0x02,那Core0岂不是读不到自己预想的结果?
2. 谢谢!我尝试按照您的方法修改一下。
Andy Yin1:
回复 Feng Jin:
问题1我的意思是多个核可以同时访问共享memory,但是如果多个核同时读写的共享memory address完全一致,则需要软件来保证顺序以确保数据读写的正确性。
Feng Jin:
回复 Andy Yin1:
谢谢回复!