This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

多核共享变量问题



大家好:

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

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

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

  • 可以配置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

  • 看了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

     

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

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

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