dcache_invalidate((uint32_t)img_addr, PIC_SIZE);
清Cache操作会使cache写入内存,确保数据是一致的。
invalidate Cache会丢弃cache里的数据,这样下次CPU会认为cache无效,而去内存读数据,否则CPU会直接从cache读数据,可能真实数据已经刷新了,但cache还没有同步更新。
dcache_invalidate((uint32_t)img_addr, 400); //invalidate the dcache, avoid that cpu read from dcache
if(*(ir_addr+364)!=0x41 || *(ir_addr+368)!=0x01) //find the first image of a depth frame cycle
{
sequence_flag = 0; //sequence is wrong.
}
else
{
sequence_flag = 1;
}
上面img_addr是图像数据接收buffer,从硬件接收数据用的,亲测假如第一行屏蔽,则下面的判定永远都找不到第一个图像(第一个图像的2个位置有特殊值0x41和0x01),也就是一直都读不到正确的数据。——> 个人认为,在内核读写任何内核以外外设(包括内存)数据的时候,需要涉及cache相关的知识(如果该内核里面加入了cache模块)
更多的我现在也不知道
参考:
RT1052 M7 芯片 D-Cache使用问题和注意事项 - osc_j5pkc521的个人空间 - OSCHINA - 中文开源技术交流社区