转:https://bbs.csdn.net/topics/391000139?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
STM32的中地址是按Bit,Byte,还是Word作为单位的? 例如0x8000000,它后面的单位是什么? Byte
为什么有的地址是按照uint16_t,有的是按照uint32_t,这个是为什么?为什么有的地址是按照uint16_t,有的是按照uint32_t,这个是为什么?
#define FLASH_BASE ((uint32_t)0x08000000)
那FLASH_BASE是个地址,为什么要对这个地址使用(uint32_t)转换呢?
答:就是赋给它一个数据类型。这样,*FLASH_BASE 就是一个双字(4字节)。
那FLASH_BASE是个地址,为什么要对这个地址使用(uint32_t)转换呢?
你看看这个宏定义是在什么地方使用的,看名字,应该是赋给某个地址变量的,那个变量的类型应该就是uint32_t的。
你当然也可以不在宏定义的地方给出类型,而在赋值的时候自己做类型转换,甚至让编译器自己做自动类型转换可能也是可以的,只是效率低一点,代码可读性差一点。