Xilinx ZYNQ7020密集访问内存出错

Xilinx ZYNQ7020密集访问内存出错问题


问题描述:

Xilinx ZYNQ7035和ZYNQ7020,没有跑linux系统,裸机和使用freertos如果频繁使用memset和memcpy会出现错误,以memcpy为例,现象是拷贝后的数据不对,无固定位置连续错32字节,这是这两款SOC的ARM核的缺陷,DCache的一行就是32字节,是由于内存高速访问情况下,Dcahce没有刷新导致的。

解决办法:

方法1:改变cache的缓存策略

/**
 * 改变缓存的策略, 密集访问内存时会出错,尤其使用函数memcpy memset,
 * 此bug是ARM芯片的, 在7020,7035中会出现
 */
inline static void ChangeCachestrategy(void)
{
	__asm__("MRC p15,0,r0,c15,c0,1\n" "ORR r0,r0,#0x00400000\n" "MCR p15,0,r0,c15,c0,1\n");
}

方法2:直接禁用dcache,不推荐此方法,cache本就是加速访问提高效率用的。

方法3:跑linux系统,项目上有原来的freertos改为使用linux后,此问题没有出现。


你可能感兴趣的:(ZYNQ7020,ZYNQ7035,Xilinx)