2021-07-04 寄存器读写

本文介绍了如何进行寄存器的读写操作,包括void指针的使用和内存对齐的考虑。接着,详细阐述了malloc和free在动态内存管理中的应用,强调了内存初始化和释放的重要性。最后,讲解了memcpy函数的用途,展示了如何高效地复制内存区域。内容涵盖了C语言的基础知识和内存管理策略。
摘要由CSDN通过智能技术生成

1. 往寄存器里 写值 再读值

typedef uint8_t u8;
typedef uint16_t u16;
typedef uint32_t u32;

往寄存器里 写值

void reg_write(u32 Addr, u32 Value) {
	u32 *LocalAddr = (u32 *)Addr;
	*LocalAddr = Value;
}

从 寄存器里 读值

u32 reg_read(u32 Addr) {
	return *(volatile u32 *)Addr;
}

2. malloc 与 free

        malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小。

int *p;
p = (int *)malloc(sizeof(int));
 memset(p,0, sizeof(int));
free(p);

(1)malloc的返回是void*,如果我们写成了:p=malloc(sizeof(int));间接的说明了(将void转化给了int*,这不合理)
(2)malloc的实参是sizeof(int),用于指明一个整型数据需要的大小,如果我们写成p=(int*)malloc(1),那么可以看出:只是申请了一个一个字节大小的空间。
(3)malloc只管分配内存,并不能对其进行初始化,所以得到的一片新内存中,其值将是随机的。一般意义上:我们习惯性的将其初始化为NULL,当然也可以使用memset函数。

   (4)  记得用完之后,要释放内存 free

   (5) 由于 malloc() 存在安全风险,安全系数要求特别高,不推荐使用。基于栈的内存管理器。

 网上摘录 总结。

3. memcpy

 原型  void *memcpy (void *, const void *, size_t);

   memcpy((void *)&data_dq,(void *)&sine_lut[index_q1] ,sizeof(uint16_t));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值