簡體   English   中英

訪問內存映射寄存器

[英]Accessing memory mapped register

假設在地址0x1ffff670處有一個內存映射的設備。 設備寄存器只有8位。 我需要獲取該寄存器中的值,然后加1並寫回。

以下是我這樣做的方法,

在內存中,我認為這是場景的樣子。 在此處輸入圖片說明

void increment_reg(){

int c;//to save the address read from memory
char *control_register_ptr= (char*) 0x1ffff670;//memory mapped address. using char because it is 8 bits

c=(int) *control_register_ptr;// reading the register and save that to c as an integer
c++;//increment by one    
*control_register_ptr=c;//write the new bit pattern to the control register
}

這種方法正確嗎? 非常感謝。

您的方法幾乎是正確的。 正如問題注釋中所指出的那樣,唯一缺少的部分是向指針類型添加一個volatile ,如下所示:

volatile unsigned char * control_register_ptr = ...

我也將其設置為unsigned char ,因為通常這是一個更好的選擇,但是基本上沒有太大區別(唯一有意義的區別是將值向下移動時的情況。)

volatile關鍵字向編譯器發出信號,即該地址處的值可能會從程序外部更改(即通過編譯器無法看到和了解的代碼)。這將使編譯器在優化負載和存儲時更加保守, 例如。

暫無
暫無

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

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