看板 C_and_CPP 關於我們 聯絡資訊
跟外國工程師聊到的, 大意是他提到, 寫driver的時候, 一些看似無意義的 read/write, 其實是必要的; 例如連續讀同一位址兩次, 連續寫同一位址兩次. 他的提問是, "什麼時候讀/寫執行的順序, 會跟我們用C寫出來, 預期的不一樣". 我馬上想到volatile這個關鍵字, 還有用assemble讓compiler不要最佳化, 但感覺他還有其他想說的; 無奈個人英文不夠好, 交談不下去. 想請問, 這方面還有什麼重要觀念, 關鍵字可以查詢? -- 我張開了手 卻只能抱住風 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.24.76.76
chrisdar:既然都寫driver了 改改MTRR也是可以的喔 ^_*~~ 02/20 10:13
chrisdar:上面是亂說的 MMIO可能也是個方向 02/20 10:15
VictorTom:也猜MMIO, 也有的是寫了之後馬上讀一次讓HW起作用的樣子 02/20 20:53
softwind:volatile應該跟 read/write順序無關 Linux kernel中 02/20 22:11
softwind:的確有一個memory XXX的巨集 用途是避免compiler跨過這行 02/20 22:12
softwind:進行變數的最佳化 不過 那個XXX 我忘了... 02/20 22:12
softwind:可能順序不一樣是因為 compiler認為R/W的兩個變數無相關 02/20 22:13
softwind:so R/W 可能會被最佳化成 W/R 02/20 22:14