指针变量与地址映射
前言
最近折返回去看大学时刚学嵌入式时写的代码,看到笔记上写着不明白指针变量和地址映射,转眼间已经是入坑时长两年半的正儿八经的嵌入式工程师了,回头解答一下四年前的问题
1、什么是指针变量
指针变量:储存地址的变量即为指针变量 int *P = &a;P就是指针变量。
指针变量P储存的名为a的int类型的存储空间的地址,对a空间进行操作可以有两种方法;
A. a = 1;将名为a的这块存储空间直接存放一个数据1
B.*P = 1;在P中存放的这个地址的位置放一个数据1,
怎么理解呢,举个例子,把存储空间a比作一个房子。
int a;表示告诉大家都我有一个名称叫a的大平层类型的房子,
int *P = &a;把我房子的位置和门牌号登记到物业管理处的一个名为P的柜子里(这物业管理处的P柜子也是另外一种类型的存储空间,即指针变量,&符号就是把房子地址抄下来
A.a =1;把这个包裹直接放到a房间;
B.*P = 1;把包裹放到物业管理处的p柜子里登记的地址的位置
2、什么是地址映射
映射:物理内存本身没有地址信息,因此为物理内存按一定编码规则分配地址的行为就是地址映射(也称内存映射)
怎么理解呢,继续上述例子,把存储空间a比作一个房子。
映射就是给房子的分配位置和门牌号的过程,
所以重映射就是重新分配的意思。
3、区别
继续例子:
比如给a空间赋值为1,像要放一个包裹到a房间,
要通过指针变量访问房间a,就相当于从P柜子取出这个地址,再根据地址编号去找到房间然后放包裹
如果有地址映射,就相当于房间a没有地址,然后你指着旁边的房子说这就是我要找的地址,然后你说是它就是它,直接扔下包裹就走。
总结
stm32位带操作中的位带区与位带别名区就有点类似与给位带区每个位分配了一个32位地址,别名区就是新地址,通过新地址也能访问。
如有错误,欢迎指正,原创不易,转载留名!