大家好:
已经安装您的方法修改了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,用于存储部分共享变量。