我正在嘗試訪問記憶體中的某個位置并檢索該記憶體位置的內容,但是當我運行它時程式似乎不起作用。我沒有收到任何錯誤,它只是一個空白的控制臺螢屏。我首先想到的是,能夠訪問這樣的記憶體位置可能會導致安全漏洞。這是原因還是我的代碼錯誤?
int main()
{
int * pointer = 100;
printf("%d", *pointer);
return 0;
}
uj5u.com熱心網友回復:
記憶體映射暫存器是嵌入式編程不可或缺的一部分 - 但您需要知道在記憶體中的哪個位置進行刺激 - 隨機位置可能會產生隨機效應(由于未定義的行為)!
對于嵌入式編譯器,通常有一個包含類似以下內容的頭檔案:
#define GPIO_PORTF_DIR_R (*( ( volatile unsigned int * )0x40025400 ) )
這些(a)適當地映射暫存器和(b)隱藏具體實作。
注意volatile限定符的使用——任何記憶體映射訪問都應該被volatile限定,否則編譯器優化也有影響!
現在我們可以在您的代碼中使用這個名稱來讀取和寫入該暫存器(無論它碰巧在哪里):
GPIO_PORTF_DIR_R = 0xF0;
data = GPIO_PORTF_DIR_R;
您的代碼導致“只是一個空白的控制臺螢屏”這一事實意味著它沒有按照您的預期進行......您的隨機位置導致隨機(未定義)行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416402.html
標籤:
