我需要从STM32F1微控制器的闪存中读取特定地址的内容。每个地址包含32位,所以我想知道我是否可以这样做:
uint32_t addr = 0X0801F000;
read_value = (*((uint32*)(addr)));或者我应该这样做:
uint32_t addr = 0X0801F000;
read_value = *(unsigned char *)addr; // this in a loop since char is 8 bits?发布于 2021-03-14 20:29:22
它可以写成这样(但是下面是一个更好的想法):
uint32_t *addr = 0X0801F000;
uint32_t read_value = *addr;如果像在第二个示例中那样将addr转换为unsigned char *,那么当取消引用无符号字符指针时,将得到一个无符号字符:
uint32_t* addr = 0X0801F000;
unsigned char read_value = *(unsigned char *)addr;所以这不是你想要的,因为你只读了一个角色。然后,还有一件事您应该记住,如果您希望编译器每次取消引用指针时读取内存地址,则需要volatile。否则,如果编译已经知道该值是,则可以跳过该值。那你就得这样写:
volatile uint32_t *addr = 0X0801F000;
uint32_t read_value = *addr;或者,如果你把这些都写在一行上(就像你在评论中所做的那样):
uint32_t read_value = (*((volatile uint32_t*)(0x0801F000)));https://stackoverflow.com/questions/66573052
复制相似问题