1.前言
写嵌入式代码时,有时候会遇到数据拷贝,但是数据区有重复的现象,本文提供了这样一个拷贝函数,针对源地址域和目的地址域有重复的问题做了特殊处理。
2.代码
void mem_move(INT8U *dst, INT8U *src, INT16U len)
{
INT8U *psrc,*pdst;
if (len == 0)
{
return;
}
psrc = src;
pdst = dst;
if( (dst <= psrc) || (pdst >= psrc + len) ) //检查是否有重叠问题
{
while(len--) //正向拷贝
{
*pdst = *psrc;
psrc++;
pdst++;
}
}
else //反向拷贝
{
psrc += len;
pdst += len;
while(len--)
{
psrc--;
pdst--;
*pdst = *psrc;
}
}
}
调用举例:mem_move(&data[0] ,&data[4], 10);
mem_move(&data[4] ,&data[0], 10);
可以试试上面两个调用,查看一下data数据。