你好:
1 最近调试TMS320C6678,用指针*p遍历共享内存某段数据,获取其中最大值,并将该值的地址赋给另一个指针*max_p,然后通过*max_p访 问该地址的值参与后面的运算,但是等到下次更新共享内存的数据时,在memory browser中观察,*max_p指针指向的数据值不变,如果不选memory browser的L1P_CACHE,L1D_CACHE,L2_CACHE,*max_p指向的数据改变,但是通过*max_p给其他变量赋值时,发现 总是赋一个定值,貌似是某次更新的数据,这个问题比较困惑,是什么原因导致的呢?是由cache导致的吗?
2 如何关闭TMS320C6678的cache呢?在非bios环境和bios环境下
谢谢!
Lin Feng1:
1如果只有一个core操作该内存,也没有外部主机修改这部分内存时,数据访问是不会因为cache而出现问题的。但是memory中的数据和cache中的数据有可能不一致,即你所说的“如果不选memory browser的L1P_CACHE,L1D_CACHE,L2_CACHE,*max_p指向的数据改变”。从你的描述上看,应该是有外部主机更新了memory,但没有invalidate cache所致。
2非bios下,L1D的配置寄存器为L1DCFG.L1DMODE为0时,L1D cache被禁止。L1P和L2同理。BIOS下,在创建platform的时候设置了cache大小。请参阅sysbios文档spruex3的6.2.2节,如何创建一个platform。