1. 程式人生 > >【嵌入式 C】向地址空間寫資料

【嵌入式 C】向地址空間寫資料

做嵌入式開發的,一定免不了和硬體打交道。我們通過讀寫暫存器的方式來管理相關的硬體,這裡的暫存器並不是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