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));