[英]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;
如果您將addr
為unsigned 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.