在编译raspberry-uboot的时候遇到了很多的问题。
比如memset的时候指针无缘无故跑飞。很可能是mmu和cache的问题
在开启CACHE的情况下
1
JTAG等等调试的时候是通过监听地址总线上的数据来暂停的。比如断点在A ,地址总线上出现了A,此时就暂停CPU。断下来了。
如果开启了CACHE,对于A-4,A, A+4地址 当执行到A-4的时候。可能由于cache的原因。将A以及A+4都cache了。此时缓存时地址总线上出现了A,因此在A断下来
了。此时执行step单步。却停不下来。因为A+4也已经被cache。A+4的数据是直接在cache里面执行的。所以地址总线上不会再出现A+4。所以step就失效了。
2 执行完大量的拷贝以后。记得刷掉ICACHE和DCACHE。因为很可能由于缓存中的数据和内存中的数据不一致,程序跑飞了。尤其是多核心的情况下。
指针跑飞一般原因有以下几种:
1.中断
2.看门狗
3.内存溢出
4.编译器优化的问题