c語言對記憶體位址的直接操作(讀ARM有感)

2021-06-09 06:45:00 字數 769 閱讀 6608

在arm中看到了 #define rwtcon (*(volatile unsigned *)0x03000000)然後在函式呼叫中對這位址直接賦值,rwtcon = (pclk / (100000-1)<<8 | (3<<3));

剛看到這嚇我一跳,以前只聽說過沒有看過,這裡還真這樣幹了,這就是c語言中的直接對記憶體賦值,以上的語句還真有特色,這樣用了巨集還在下面移位操作,運用的這麼規範化

,比如我們要將某數中間的第7,6,5位分別置011(假設這數先被初始化為0)  這個一般不是x |=0x01100000;而是這樣x |= (3<<5);好處在於,十進位制比十六進製制更方便看,方便檢查。

關鍵字 volatile:(易變的) 乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份。就好似每次操作都重新整理,類似原子操作的功能

後面的位址是查arm手冊得到的,雖然注釋為,....暫存器,但這與我們理解的cpu中的暫存器(不能取位址)不一樣,這裡就是記憶體位址(外設暫存器,定址方式與記憶體定址方式一樣(速度當然也一樣))

這裡上一段**

[cpp]view plain

copy

#include 

int main()    

vc編譯通過,值得注意得是上面指標的宣告,這玩意恐怕你都沒有見過吧,這就是高階指標宣告,指標乃c語言精華,靈活多變;做完這幾天的筆記繼續學習arm去....

VBA中對記憶體位址的操作

vb中不支援指標資料型別,相應的vba也不支援指標資料型別,因此也沒有類似於c語言中的位址操作符 但是仔細研究後,vba還是支援一些位址操作的。這裡介紹兩種函式,varptr strptr varptr 返回乙個變數 字串變數除外 的首位址,strptr 返回乙個字串變數的首位址。段 dim aa ...

C語言記憶體位址

任務清單 c語言在記憶體中一共分為5個區域 記憶體棧區 存放區域性變數名 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等,函式呼叫結束後釋放記憶體空間。通常是用於那些在編譯期間就能確定儲存大小的變數的儲存區,用於在函式作用域內建立,在離開作用域後自動銷毀的變數的儲存區。通常是區域性變數,函...

C 可否對記憶體進行直接的操作

c 可否對記憶體進行直接的操作 可以使用指標 在這篇文章中將描述c 的乙個特性指標和所謂的不安全 非安全 非安全 就是不在 clr 完全控制下執行的 它有可能會導致一些問題,因此他們必須用 unsafe 進行表明 unsafe 在其他一些地方也可以使用關鍵字 unsafe 例如我們可以將類或方法表明...