首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从闪存STM32F1读取特定地址的内容

从闪存STM32F1读取特定地址的内容
EN

Stack Overflow用户
提问于 2021-03-10 21:22:11
回答 1查看 223关注 0票数 1

我需要从STM32F1微控制器的闪存中读取特定地址的内容。每个地址包含32位,所以我想知道我是否可以这样做:

代码语言:javascript
复制
uint32_t addr = 0X0801F000;
read_value = (*((uint32*)(addr)));

或者我应该这样做:

代码语言:javascript
复制
uint32_t addr = 0X0801F000;
read_value = *(unsigned char *)addr;  // this in a loop since char is 8 bits?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-14 20:29:22

它可以写成这样(但是下面是一个更好的想法):

代码语言:javascript
复制
uint32_t *addr = 0X0801F000;
uint32_t read_value = *addr;

如果像在第二个示例中那样将addr转换为unsigned char *,那么当取消引用无符号字符指针时,将得到一个无符号字符:

代码语言:javascript
复制
uint32_t* addr = 0X0801F000;
unsigned char read_value = *(unsigned char *)addr;

所以这不是你想要的,因为你只读了一个角色。然后,还有一件事您应该记住,如果您希望编译器每次取消引用指针时读取内存地址,则需要volatile。否则,如果编译已经知道该值是,则可以跳过该值。那你就得这样写:

代码语言:javascript
复制
volatile uint32_t *addr = 0X0801F000;
uint32_t read_value = *addr;

或者,如果你把这些都写在一行上(就像你在评论中所做的那样):

代码语言:javascript
复制
uint32_t read_value = (*((volatile uint32_t*)(0x0801F000)));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66573052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档