【嵌入式 C】向地址空間寫資料
阿新 • • 發佈:2018-11-08
做嵌入式開發的,一定免不了和硬體打交道。我們通過讀寫暫存器的方式來管理相關的硬體,這裡的暫存器並不是CPU空間中的暫存器,我們的暫存器實際上是一個地址單元(屬於特殊暫存器),燒寫程式時要被對映到地址空間上。所以我們通過讀寫地址這種方法來訪問暫存器是避免不了的。
方法:
(*(volatile unsigned int *)0x11400020) = 0x22 //向0x11400020這個地址指向的空間寫入0x22值
- * 0x11400020 表示為要訪問的地址 ,因為地址型別 前面要加上一個 * 說明
- *(unsigned int *)0x11400020 地址是沒有型別的,我們要根據寫入的資料給它轉換成對應的型別,前面加(unsigned int *)進行轉換
- (*(volatile unsigned int *)0x11400020) 由於我們訪問的是硬體地址,有時候資料是不受我們控制的(易變的)。所以加上volatile 修飾符,避免編譯器自作主張的優化
為了方便,我們可以通過巨集將前面的地址給‘封裝’起來:
#define ADDR (*(volatile unsigned int *)0x11400020)
...
...
ADDR = 0x22; //向地址ADDR 寫入 0x22