Re: [問題] volatile

看板C_and_CPP作者 (..)時間13年前 (2010/09/13 13:35), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《cyu021 (taco)》之銘言: : volatile是為了防止compiler在做最佳化的時候誤判情勢 : 而沒有去更新變數/位址。 : 總之你在debug的過程中如果發現某些變數/位址在任何情況下都 : 沒有被更新的話,可以試試看宣告變數的時候在前面加個volatile。 : ※ 引述《goo666 ()》之銘言: : : unsigned rxbus_data; : : rxbus_data = *(volatile unsigned *) 0x0E000010; : : 請問宣告中帶volatile是什麼意思? : : volatile在MSDN內可以找到嗎? 前輩您好, 小弟對於這個關鍵字感到非常的困惑.... 始終找不出原因.... typedef struct MsgInfo { //volatile DWORD udp_rmcp; volatile DWORD rx_data; /*volatile*/ WORD tx_pilot; /*volatile*/ WORD rx_pilot; //volatile DWORD tx_data; /*volatile*/ BYTE rx_ok; }MsgInfo_t; struct A { struct MsgInfo B; } main() { A->B.rx_data= (DWORD)array[0]<<24 |(DWORD)array[1]<<16 |(DWORD)array[2]<<8\ |(DWORD)array[3]); } 若array[]為一會內容會變動的陣列 若恰好array[2],array[3]為0時, array[0], array[1]不為0時, 發現rx_data不會被更新...... 不知道是volatile的運用誤解還是compiler的問題..... 真不知道要怎樣才能順利更新rx_data的值? 請各位前輩能不能給小弟一點建議該怎麼改這段程式 感激萬分!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.250.104

09/13 15:39, , 1F
你的 volatile 要加在 array 上吧
09/13 15:39, 1F
文章代碼(AID): #1CZRWckE (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1CZRWckE (C_and_CPP)