在微控制器編譯環境中。。。C指標能直接操作記憶體位址嗎?

2025-03-22 11:45:27 字數 3716 閱讀 6242

1樓:匿名使用者

#define periph_base ((u32)0x40000000)#define apb1periph_base periph_base#define tim2_base (apb1periph_base + 0x0000)#define tim2 ((tim_typedef *)tim2_base)typedef struct tim_typedef;tim2->dier |=0x0002;就是((tim_typedef *)u32)0x40000000))-逗碰虛dier |=0x0002;對位址0x40000000進行寫,0x40000000是硬體控制器位址。在你的例子中0x20應該剛好是可讀可寫的ram區。

2樓:匿名使用者

答:你想的完全正確。就是那樣。

可以直接用立即數(直接數字,如0x000001)操作某個位址的內容,任意變換, 這個位址也可以當做普通的數來用。 但是一般不蔽旁這樣用,因為你要知道哪巨集中橡些位址可用才能直培埋接這樣寫。

怎麼用c語言操作微控制器內部ram位址啊?

3樓:網友

//比如用c語言訪問ram的30h單元。

char * pram; //定義乙個個指標。

pram = 0x30; //賦位址給乙個指標。

pram; //解引這個指標就可以訪問了。

c語言微控制器,儲存暫存器的位址要怎麼定義指標

4樓:做而論道

p1^1,這是「位位址」。

因為,位位址,在組合語言中,只能直接定址,不支援間接定址。

那麼,在 c 語言中,也就不能用指標來操作。

同樣,也不能用「「位位址」」構成陣列。

5樓:藝嵌科技

不能定義這種陣列,要採用其他方式。如新增查表函式等。

6樓:網友

位址麼。。。大概暫存器的變數是用register修飾的。。。那麼就不能用&取位址了。

c指標 與 記憶體位址的 問題

7樓:網友

用vs或 eclipse+cdt除錯就行了,這些工具支援監視記憶體。

c語言能像彙編一樣直接操作位址嗎?

8樓:永恆

1全部用嵌入在c中的彙編是可以的。但用純c的**是不行的。

9樓:網友

可以的,在dos時代這種例子也不少。

但是windows下 通常會發生記憶體訪問錯誤你可以把乙個int/long 強制賦給乙個指標,就可以用這個指標去訪問直接的位址了。

比如int *p=0x12345678;

p=666;

c語言的指標,在寫51微控制器程式用得上嗎?

10樓:風若遠去何人留

可以的。在51微控制器的嵌入式c語言中,指標同樣是被支援的。

所以在微控制器上一樣可以使用指標操作,具體使用方法,與標準c語言並沒有不同。

不過需要注意的是,使用指標代表著間接定址,相對變數的直接定址,速度要稍慢一些。而微控制器運算速度較慢,大量使用指標有可能會降低執行效率,影響效果。所以除非必要,還是少用指標。

11樓:網友

絕對用得上!用c語言來編寫指標本來就是c51程式設計的重點,我們當時參加電子設計大賽的時候,用的是51微控制器,c51是51微控制器使用的語言。在凌陽61裡用的c語言更是不能缺少指標,很多埠都是用指標表示的。

推薦樓主使用北航出版的一本書,關於微控制器c51程式設計的,具體書名忘了,在卓越亞馬遜網上搜尋關鍵字就可以找到,我們培訓時候用的都是這本書。c51的程式設計和硬體是聯絡的非常緊密的。

12樓:網友

一般是不行的,指標是32位的,嘿嘿,現在的51貌似是16位的吧?有時候定址會出錯。

13樓:網友

1l的意思我不明白,為何指標一定是32位的?使用char關鍵字就可以定義8位的指標。

所以在微控制器中使用指標是沒有問題的,在微控制器中與字串操作相關的很多函式都是通過指標來完成的。

14樓:匡金後方

c51上也支援指標的,c語言的魅力之一就是指標呀,不用指標很多變數,陣列什麼的,操作起來很麻煩。指標不難學的,就是個名字嘛。

c語言可以直接對硬體進行操作嗎

15樓:網友

不能。首先,c語言不能夠直接對硬體進行操作。從本質上來說,連組合語言都不可以。只有機器語言能夠直接操作硬體。

其次,c語言要操作硬體是必須經過一系列的編譯轉換。最終它會成為0101的機械碼,這個時候它根本不是我們所能夠理解的c語言了。

以gcc編譯器為例,這個可以分為四步。

第一步是預處理,包括語法檢查等工作。 gcc -p 第二步由源程式生產組合語言**。 gcc -s 會生成檔案,這個檔案裡就是彙編**。

第三步編譯器生成目標**,乙個原始檔生成乙個目標**。 gcc -c 會生成 第四步聯結器從目標**生成可執行檔案。 gcc

最後,相對來說,c語言在高階語言當中是最貼近物理層面的語言。它也被稱作高階語言裡面的低階語言。因為它很多方面都非常貼近硬體。

典型的就是指標,這是一種通過實體地址直接操作記憶體的變數。

16樓:網友

c語言只是一種程式設計工具,微控制器程式設計可用c語言,機械人程式設計也有用c語言,計算機系統下的程式設計也可以用c語言。是否可以操作硬體,看你用c語言的環境。微控制器程式設計、機械人程式設計肯定就要操作硬體,如果是編寫計算機系統的軟體,又要看是什麼作業系統,win98之前的系統,程式可以直接操作硬體,nt以後的系統,使用者程式不能直接操作硬體,必須通過驅動程式介面來操作硬體。

c語言中指標變數是存在**的?

17樓:網友

指標是變數的型別,它也是變數呀,你上面不就是說的變數嗎,指標也是普通變數。

18樓:網友

指標本身存放地的規則同一般變數,如果是全域性或者靜態就在堆中,如果是區域性變數、引數就放在棧中。

19樓:網友

指標也是變數啊 也分區域性變數和全域性變數 和普通的變數沒什麼差別。

20樓:匿名使用者

放在棧中,和 int b;一樣;

int* a;和 int b;

a和b存放在同一塊記憶體中。

21樓:網友

1樓說的對,int* a就是區域性變數嘛。

22樓:網友

1、指標變數。

bai和普通的變du量一樣,編譯期儲存在代zhi碼當中,執行期間儲dao存在記憶體專裡。c語言的屬變數值是通過該變數的記憶體位址定址得到的,而對於乙個已經編譯好的程式,變數的位址都是確定的值,不可以更改。這是因為程式在編譯時編譯器已經通過語法分析把指標變數的位址值計算出來了,所以指標變數實際上不用儲存在記憶體堆疊或資料段中,而是包含在彙編**裡面。

2、指標變數裡面就是整型的乙個十六進位數,用來表示的就是指向某個變數的位址;

指標是c語言中廣泛使用的一種資料型別;

利用指標變數可以表示各種資料結構;

能很方便地使用陣列和字串;

並能象組合語言一樣處理記憶體位址,從而編出精練而高效的程式;

指標極大地豐富了程式語言的功能。

51微控制器中c 1是什麼意思,51微控制器C語言中 和 的意思是什麼?

51微控制器中c 1表示 運算時有進位或者借位。如果c是自己定 bai義的變數,那du麼這個就是單純的賦zhi值語句。如果c是psw 程dao序狀態字 版,用於儲存指令執行結 權果的狀態資訊 中的cy 進位標誌位 那麼這句就是表明之前,執行的某些算術運算或者邏輯運算產生了進位或借位了。變數賦值!51...

51微控制器C語言二進位制與十進位制能直接運算嗎

對微控制器來說,不管任何進位制的數字,在微控制器內部都是二進位制表示的。所以能直接運算。但是微控制器計算浮點數是非常耗時的,因此要優化演算法,比如你的乘以0.0625等價於除以16 1 16 0.0625 而除以16等價於算數右移4位,這樣的運算比直接乘以0.0625快幾十倍。以上的能是能算,但是,...

nop 在c語言裡怎麼用呢,51微控制器c語言裡 nop 函式怎麼用?

在c語言裡沒有這個 nop 函式,這個函式是在51微控制器裡使用的。作用 對於延時很短的,要求在us級的,採用 nop 函式,這個函式相當彙編nop指令,延時幾微秒。nop指令為單週期指令,可由晶振頻率算出延時時間,對於12m晶振,延時1us。對於延時比較長的,要求在大於10us,採用c51中的迴圈...