请教一下,(*(volatile uint8_t *)(uint32_t)(addr))和(*(volatile uint32_t *)(uint32_t)(addr))分别代表什么意思啊?

2019-07-20 23:40发布

假设地址:
#define addr 0x04195709
(*(volatile uint8_t *)(uint32_t)(addr))和(*(volatile uint32_t *)(uint32_t)(addr))分别代表什么意思啊?
和 (*(uint32_t *)(addr)) 又有什么区别呢?



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
TinyBoy
2019-07-21 00:40
0x04195709只是一个数字,本身貌似没有什么用处,但是经过你处理一下,就是变成指针了,也叫内存地址了。首先(volatile uint8_t *)addr,这里(uint32_t)没必须要写了,把这个数字强制转换成地址,内存地址,这个数字必须在内存地址范围内,经过转换,它就是指针了,然后,*((volatile uint8_t *)addr),就是一个变量或者寄存器了,就可以对它运算赋值了,寄存器常用这种方法来定义。这里和volatile uint8_t x定义变量x是一样的,只是x分配到哪个内存地址我们没必要知道,如果指定x的地址是 0x04195709,就是你要问的问题了。

一周热门 更多>