簡體   English   中英

從 flash memory STM32F1 讀取特定地址的內容

[英]Read content of a specific address from flash memory STM32F1

我需要從 STM32F1 微控制器的 FLASH memory 中讀取特定地址的內容。 每個地址包含 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?

可以這樣寫(但請參閱下面的更詳細的想法):

uint32_t *addr = 0X0801F000;
uint32_t read_value = *addr;

如果您將addrunsigned char *就像您在第二個示例中所做的那樣,那么,當您取消引用 unsigned char 指針時,您會得到一個 unsigned char:

uint32_t* addr = 0X0801F000;
unsigned char read_value = *(unsigned char *)addr;

所以這不是你想要的,因為你只會讀到一個字符。 然后,您應該記住另一件事,如果您希望編譯器每次取消引用指針時都讀取 memory 地址,則需要volatile 否則,如果它已經知道該值是,則編譯可以跳過該值。 然后你必須這樣寫:

volatile uint32_t *addr = 0X0801F000;
uint32_t read_value = *addr;

或者,如果您將所有內容放在一行中(就像您在評論中所做的那樣):

uint32_t read_value = (*((volatile uint32_t*)(0x0801F000)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM