大家好,新手求助。
我在多一个MessageQ用于多核通信。
在此我用了一片6670的4个核,选择共享内存中的一块地址作为message的分配地址。在SharedRegion.setEntryMeta中,设置0的基地址为0x0C000000,1的基地址为0x0C018000.所有message的分配选择在1中分配(创建Heap时选择的RegionID为1).
0核message分配的地址为0x0c0180c0,1核message的地址为(通过getMessage函数获得的)0x0c0180c0,1核可以正确显示0和发送来的消息,1核将消息做修改后在转发给2核。2核message的地址(通过getMessage函数所得)为0x0000001c(该值与getMessage函数前的值保持一致)。故不能从共享空间1中读取消息。1核这里的msg的地址是中为系统初始化的地址,在getmessage函数之后不会发生改变。
以下是我四个核的SharedRegoin的静态配置,四个核保持一致。
var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
SharedRegion.translate =false;
SharedRegion.numEntries = 2;
SharedRegion.setEntryMeta(0,
{ base: SHAREDMEM,
len: SHAREDMEMSIZE,
ownerProcId: 0,
isValid:true,
cacheEnable:true,
cacheLineSize: 64,
createHeap:true,
name: "SHAREDMEMORY",
});
var SHAREDMEM1 = 0x0C018000;
var SHAREDMEMSIZE1 = 0x00001000;
//var ShareRegion1 = xdc.useModule('ti.dso.ipc.ShareRegion');
//ShareRegion1.translate = false;
SharedRegion.setEntryMeta(1,
{ base:SHAREDMEM1,
len:SHAREDMEMSIZE1,
ownerProcId:0,
isValid:true,
cacheEnable:true,
cacheLineSize:64,
createHeap:true,
name:"ShMem_Msg",
});
在0核创建Heap时选择的RegionID为1,所有核通过MessageQ_alloc函数为message分配空间是,0核与1核都是在Region1中完成的。0核申请空间将消息发送给1核,1核处理后释放空间,重新申请空间,讲消息再发送给2核。此时0核与1核申请空间所得地址是一样的,如上所述。1核接通过MessageQ_get接收消息时本地的message指针指向了0核为message申请的空间。2核在接收消息时,get函数无法获得正确的message在共享空间中的地址。
问题:请问这里所述的2核无法通过Message_get函数获得正确的message在共享空间中的地址是怎么回事?
还请大家帮忙解答,谢谢各位了。
Fenghao Qiao:
补充,我在例程中改为用两个sharedRegion时,系统可以正常运行,当我自己建一个工程时,出现了上述错误,还请各位帮忙指点一下可能出错的地方,方便我自己查找一下,谢谢。
Andy Yin1:
消息发送成功么,core1能给core0发送返回消息成功么,core2上需要创建一个message_Q.