一、概述
大部分时候,我们需要对内存,或者对数组进行我们想要的内容操作,所以对这个函数进行解析一下。
函数原型如下:
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);