目 录CONTENT

文章目录

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

moke
2024-07-11 / 0 评论 / 0 点赞 / 30 阅读 / 0 字

一、概述

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

函数原型如下:

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);
博主关闭了所有页面的评论