一种带重复区域的数据拷贝程序

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数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值