TI中文支持网
TI专业的中文技术问题搜集分享网站

SharedRegion内存共享问题

SharedRegion内存共享到底是个什么机制呀?

我在主核上通过Memory_alloc分配了一段共享内存,然后在这段内存中写入数据,之后通过Notify模块就这个地址传递给了从核。

从核获得这个地址后,读取这个地址的内容发现同原来写入的数据不一样,这到底是个什么回事呀?

下面是我的代码:

.cfg文件中的SharedRegion设置

var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');

/* Shared Memory base address and length */
var SHAREDMEM_0= 0x0c000000;
var SHAREDMEMSIZE_0= 0x00200000;

SharedRegion.setEntryMeta(0,  // 区域ID{ base: SHAREDMEM_0,// 基地址len:  SHAREDMEMSIZE_0,// 区域大小ownerProcId: 0,// 所有者的核IDisValid: true,// 对于当前核,该区域是否有效name: "DDR2_RAM_0",// 区域名称});

.c文件中的相关代码:

if (coreId == 0) {	inBuf = (unsigned char*)Memory_alloc(SharedRegion_getHeap(0), dateNum, 128, NULL);	if(inBuf==NULL)	{		System_printf("malloc Buf failed\n");		BIOS_exit(0);	}	for(i=0;i<dateNum;i++){		inBuf[i]=i*3+5;	}	inBuf_srptr = SharedRegion_getSRPtr(inBuf, 0);	inBuf=SharedRegion_getPtr(inBuf_srptr);	System_printf("inBuf address 0x%x\n",inBuf);	System_printf("outBuf date is ");	for(i=0;i<dateNum;i++)		System_printf("%d ",inBuf[i]);	System_printf("\n");	for(i=1;i<8;i++)		status = Notify_sendEvent(i, INTERRUPT_LINE, BufEVENT, (UInt32)inBuf_srptr, TRUE);}else{	Semaphore_pend(semHandle, BIOS_WAIT_FOREVER); // 等待从核完成全部任务	inBuf=SharedRegion_getPtr(inBuf_srptr);	System_printf("inBuf address 0x%x\n",inBuf);	System_printf("regionId is %d\n",SharedRegion_getId(inBuf));	System_printf("outBuf date is ");	for(i=0;i<dateNum;i++)		System_printf("%d ",inBuf[i]);	System_printf("\n");}

结果:

[TMS320C66x_0] inBuf address 0xc02d780
[TMS320C66x_1] registerEvent status is 0
[TMS320C66x_0] outBuf date is 5 8 11 14 17 20 23 26    // 这里是输入数据
[TMS320C66x_0] SharedMem is finished
[TMS320C66x_1] inBuf address 0xc02d780
[TMS320C66x_2] inBuf address 0xc02d780
[TMS320C66x_3] inBuf address 0xc02d780
[TMS320C66x_4] inBuf address 0xc02d780
[TMS320C66x_5] inBuf address 0xc02d780
[TMS320C66x_6] inBuf address 0xc02d780
[TMS320C66x_7] inBuf address 0xc02d780
[TMS320C66x_1] regionId is 0
[TMS320C66x_2] regionId is 0
[TMS320C66x_3] regionId is 0
[TMS320C66x_4] regionId is 0
[TMS320C66x_5] regionId is 0
[TMS320C66x_6] regionId is 0
[TMS320C66x_7] regionId is 0
[TMS320C66x_1] outBuf date is 255 255 255 255 128 40 29 0     // 输出数据
[TMS320C66x_2] outBuf date is 255 255 255 255 128 40 29 0[TMS320C66x_3] outBuf date is 255 255 255 255 128 40 29 0[TMS320C66x_4] outBuf date is 255 255 255 255 128 40 29 0[TMS320C66x_5] outBuf date is 255 255 255 255 128 40 29 0[TMS320C66x_6] outBuf date is 255 255 255 255 128 40 29 0[TMS320C66x_7] outBuf date is 255 255 255 255 128 40 29 0[TMS320C66x_1] SharedMem is finished
[TMS320C66x_2] SharedMem is finished
[TMS320C66x_3] SharedMem is finished
[TMS320C66x_4] SharedMem is finished
[TMS320C66x_5] SharedMem is finished
[TMS320C66x_6] SharedMem is finished
[TMS320C66x_7] SharedMem is finished

Denny%20Yang99373:

1,看看是否与CACHE有关系,没有真的写进去

2,通过仿真器连上各核,看memory browser,分析一下

Qian Tang:

回复 Adam Yao94020:

的确只是写入cache了,如何才能让其写入共享内存呢?

赞(0)
未经允许不得转载:TI中文支持网 » SharedRegion内存共享问题
分享到: 更多 (0)