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

多核共享变量问题

大家好:

已经安装您的方法修改了CMD文件,但是还是打印出下面信息。
已经定义变量g_flag , 核0给核1 ,发中断,核1在中断里把g_flag加1.然后给核0发中断,核0在中断里把变量g_flag又加1。
g_flag 被加了两次,应该打印出4, 为什么还是打印出3? 附件是我的CCS工程, 麻烦高手看下,哪里错了,谢谢。

Andy Yin1:

共享内存中的变量,如果共享内存开了是cacheable,则需要手动维护cache一致性,否则某一个core不能获得其他core更新的数据,你可以把共享memory设置为noncacheable,这样就不需要手动维护cache一致性,否则可以在写之后刷cache,读之前invalid cache。

jian zong1:

回复 Andy Yin1:

谢谢Andy Yin1的回答,请问如何把共享内存,设为noncacheable?

Andy Yin1:

回复 jian zong1:

可以配置core register MAR,参考c66x corepac user guide说明,及STK例程main函数中对MAR的使用,也可以调用CSL函数配置。

STK:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx

jian zong1:

回复 Andy Yin1:

看了core register MAR,好像它可以配置某段内存的属性是否为cacheable。 但是我的全局变量是在MSMC共享内存区, 而MSMC地址范围是 :0x0C000000—–0C3FFFFF,.MAR15这个寄存器它在PDF文档中如下所示,它控制的内存区间为: 0C00 0000h – 0CFF FFFFh,但是这个寄存器是read-only,怎么把MSMC配置为non-cacheable?

0184 8034h MAR13 Memory Attribute Register 13 0C00 0000h – 0CFF FFFFh

 

jian zong1:

回复 jian zong1:

请TI专家帮忙,怎么设置MSMC为non-cacheable?

Andy Yin1:

回复 jian zong1:

由于SL2空间有限,一般将SL2全部配置为cacheable;并且受限于MAR配置cache颗粒度为16MB,所以不能将SL2部分配置为cache部分配置为noncache,如果一定要将SL2部分memory配置为noncache的话,只能使用MPAX将SL2重映射到其他逻辑memory。

如果DDR够用的话,建议在DDR上开辟16MB空间为noncache,用于存储部分共享变量。

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