[問題] valotile問題一問

看板C_and_CPP (C/C++)作者 (魔鬼藏在細節裡)時間14年前 (2012/01/05 23:50), 編輯推噓1(1016)
留言17則, 5人參與, 最新討論串1/1
大家好,小弟對於valotile修飾變數有不太了解的地方 關於volatile小弟的想法是為了不讓compiler讓變數最佳化 (即去register撈資料 速度比較快) 而是直接在Memory存取值, 我看過一個例子是說可以經由volatile去直接存取memory裡面的值 ex: unsigned long Memory = 0x8F8F8F8F (目標要取值的記憶體位置) int Value = 0; Value = *((volatile unsigned long *) Memory); 諸如此類 我的疑問是在這個例子中,unsigned long* 的用意到底是什麼呢?? 麻煩大家解惑一下~謝謝 -------------------------------------------------------------- 謝謝大家的講解,這是我剛剛寫的例子 unsigned long Memory = 0x22ff70; unsigned long Value = 0xFFFFFFFF; *((volatile unsigned char *) Memory) = Value; Value = *((volatile unsigned long *) Memory); printf("Value:%x\n",Value); OUTPUT為 0xFFFFFFFF 我的問題是 以寫值來說highlight那行轉型其實用long or char 都沒差 這又是為什麼呢?? 再次謝謝大家解惑╭(─╴╴─)╮ ▃▇ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.195.212.41

01/05 23:55, , 1F
找一本基礎書翻到指標的章節...
01/05 23:55, 1F

01/05 23:56, , 2F
把0x8F8F8F8F當作 無負號(unsigned)32位元(long)的指標*
01/05 23:56, 2F

01/05 23:57, , 3F
的值
01/05 23:57, 3F
※ 編輯: cates 來自: 123.195.212.41 (01/06 00:05)

01/06 00:08, , 4F
那無負號(unsigned)32位元(long)的指標* 是一個Temp的變數嗎
01/06 00:08, 4F

01/06 00:11, , 5F
應該是說組語會將此位置存到一個暫存器,再用lw,sw存取值??
01/06 00:11, 5F

01/06 00:16, , 6F
那個動作叫做轉型,因為C語言會檢查變數型態才要這樣寫
01/06 00:16, 6F

01/06 00:17, , 7F
組語大概是 mov edx,8F8F8F8F mov eax, [edx] 這種感覺
01/06 00:17, 7F

01/06 00:18, , 8F
mov edx,8F8F8F8F mov eax, dword ptr [edx] 這樣
01/06 00:18, 8F

01/06 00:20, , 9F
是~我明瞭了~另一個問題是Memory是32bit的話 我用unsigned
01/06 00:20, 9F

01/06 00:23, , 10F
char* 結果取出來的值為什麼會用long一樣呢??我寫FFFFFFFF
01/06 00:23, 10F

01/06 00:23, , 11F
給完整一點的程式碼
01/06 00:23, 11F

01/06 00:23, , 12F
的值進去的,取出來也是FFFFFFFF
01/06 00:23, 12F

01/06 00:24, , 13F
說來說去還是pointer問題,與volatile無關。
01/06 00:24, 13F

01/06 00:27, , 14F
u. char* 取出來 "也" 是 0xffffffff 是運氣好,但換個
01/06 00:27, 14F

01/06 00:28, , 15F
可能的說法是:那塊記憶體沒被洗掉.如j大,放上code為佳.
01/06 00:28, 15F

01/06 00:28, , 16F
另猜這篇 "可能" 有一點幫助 #1Ekuf5w4
01/06 00:28, 16F
※ 編輯: cates 來自: 123.195.212.41 (01/06 00:36)

01/06 00:38, , 17F
謝謝tropi大~我先去看看先
01/06 00:38, 17F
文章代碼(AID): #1F1SRAPy (C_and_CPP)
文章代碼(AID): #1F1SRAPy (C_and_CPP)