昨天说过,将一块内存中的数据通过DMA的方式拷贝到另一块内存中以后,读出另一块内存的值查看,发现结果不是我们预料的值。原因呢,就是cache的问题:通过DMA的方式,第二块内存的值改变了,但是CPU不知道。我们再读取第二块内存的值的时候,CPU认为其内容没变,直接在cache里面读了。所以导致结果不符合。
我认为解决办法有三个:
1)关掉cache。但是这种办法会影响性能。
2)将第二块内存通过寄存器NCACHBE0或者NCACHBE1设置为non-cache区域。
3)在读取第二块内存的值之前,将cache进行flush。这样cache中的值都变掉了,CPU就只能从内存中重新读取其保存的值了。
这些办法我都试了,可惜,可惜。。。竟然还是Error!哎。
另外,那个万能的test程序竟然全是OK。我对比了好久好久,把二者有差别的地方都改过来了,也没能把我的程序的Error解决。哎。
实在没办法了,先进行其他的吧,也许过段时间猛然发现,问题如此简单啊!