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

C6678:使用bios时全局变量的问题

我在两个例程里面看到对全局变量的使用方法有矛盾,还请专家帮忙解释下

在shmIPC例程里面,在c文件开头定义了一些全局变量,从下文的程序中可以看出,各个core都有自己的全局变量,全局变量的值都不一样。

但是在led_play例程里面,定义了next_core这个全局变量,却被用于多核之间同步,因此可见多核都可以访问的是同一个内存空间。

这里我有一点想不明白,对于多核程序,全局变量是多核共享的还是每个core都有对应的全局变量?

如果全局变量是共享的,shmIPC中之所以多核各自访问得到的全局变量值不同,只是因为各自cache里面的数据没有维护一致性,那么这样的使用方式岂不是很不安全?

Andy Yin1:

如果是多核共享一个out的话,可以很容易做到多个核使用相同的变量名字对应不同的地址;如果多核共享一个out,如果定义的全局变量在LL2则是私有的,如果在共享memory则是共享变量。

siying long:

回复 Andy Yin1:

如果用不同的.out呢,多核共享同一变量出问题是什么原因???

怎么保证两个核中的同一个变量指向一个地址,核0的标识位isMCBSPInitialized置1了,但核1中isMCBSPInitialized还是0,没有同步,我两个核用相同的程序就可以同步。

两个核都是这样定义的

#pragma DATA_ALIGN (isMCBSPInitialized, 128)#pragma DATA_SECTION (isMCBSPInitialized, ".initialiedSharedMem");volatile Uint32 isMCBSPInitialized = 0;

核0:

isMCBSPInitialized = 1;

CACHE_wbL1d ((void *) &isMCBSPInitialized, 128, CACHE_FENCE_WAIT);

核1:

while (isMCBSPInitialized == 0)CACHE_invL1d ((void *) &isMCBSPInitialized, 128, CACHE_FENCE_WAIT);

核0的cmd:

SECTIONS{.init_array: load >> L2SRAM.mcbsp: load >> MSMCSRAM.initializedSharedMem: load >> MSMCSRAM// .mcbspSharedMem: load >> MSMCSRAMplatform_lib: load >> MSMCSRAMsystemHeap: load >> L2SRAM}

核1的cmd:

SECTIONS{.init_array: load >> L2SRAM.initialiedSharedMem: load >> MSMCSRAM.qmss: load >> MSMCSRAM.cppi: load >> MSMCSRAM}

Adam Yao94020:

回复 siying long:

一个简单的办法,你可以分别检查两个核的map文件,看看这两个变量是否分配到了MSMC上面的相同地址。如果分配到相同地址的话,这样操作是没有问题的。

siying long:

回复 Adam Yao94020:

怎么保证两个核中共享全局变量分配相同地址,我查看了两个map文件分配地址不一致。

Adam Yao94020:

回复 siying long:

最简单的办法就是多个核使用同一个out文件,将共享变量分配到MSMC中

如果每个核要使用不同out文件的话,需要在cmd中强制指定一个共享section的起始地址,然后将两个核的共享变量都分配到这个section中,同时共享变量最好定义在一个相同的C文件中,保证编译的时候分配在section中的顺序也相同

赞(0)
未经允许不得转载:TI中文支持网 » C6678:使用bios时全局变量的问题
分享到: 更多 (0)