记录点 (一):memcpy及其类似函数怎么使用

目录

一、概述

二、使用方式

2.1 对指定RAM地址操作

2.2 将函数复制进RAM

2.3 数据Copy


一、概述

        大部分时候,我们需要对内存,或者对数组进行我们想要的内容操作,所以对这个函数进行解析一下。

函数原型如下:

void *memcpy(void *dst, const void *src, size_t size)
{
    char *psrc;
    char *pdst;

    if (NULL == dst || NULL == src)
    {
        return NULL;
    }

    if ((src < dst) && (char *)src + size > (char *)dst) // 出现地址重叠的情况,自后向前拷贝
    {
        psrc = (char *)src + size - 1;
        pdst = (char *)dst + size - 1;
        while (size--)
        {
            *pdst-- = *psrc--;
        }
    }
    else
    {
        psrc = (char *)src;
        pdst = (char *)dst;
        while (size--)
        {
            *pdst++ = *psrc++;
        }
    }

    return dst;
}

二、使用方式

2.1 对指定RAM地址操作

方法1:

 将0x7000E000里的数据写成BlockData的数据

#include "string.h"

uint8 *BlockRam = (uint8 *)0x7000E000;

uint8 BlockData[10] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A};

memcpy(BlockRam ,BlockData,10);

方法2:


#define  Mem_NULL   ((void*)0)

#define  Address1    0x70000000
#define  Address2    0x70000004
#define  Address3    0x70000008


void MemSetCopy(uint8 *Des,uint8 Src)

{
    if( Des != Mem_NULL)
    {

        *Des = Src;

    }

}

假设将 Address1  Address2  Address3 地址空间清零

MemSetCopy((uint32 *)Address1, 0x00000000);
MemSetCopy((uint32 *)Address2, 0x00000000)
MemSetCopy((uint32 *)Address3, 0x00000000)

2.2 将函数复制进RAM

举例如下,假设将Fls驱动Copy进0xC0000000的RAM空间

static const unsigned char FLSDrive[0x100] = {0xAA};

memcpy((void *)0xC0000000, (const void *)FLSDrive,0x100);

2.3 数据Copy

        举例将Buff1的数据Copy到Buff2

uint8 Buff1[2] = {0xAA,0xBB};
uint8 Buff2[2] = {0xCC,0xDD};
memcpy(Buff1,Buff2,2);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

剑从东方起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值