[問題] 觀念問題, 關於最佳化導致driver結果錯誤

看板C_and_CPP作者 (19非崇貞,最多是袁紹)時間13年前 (2011/02/20 10:08), 編輯推噓3(305)
留言8則, 3人參與, 最新討論串1/1
跟外國工程師聊到的, 大意是他提到, 寫driver的時候, 一些看似無意義的 read/write, 其實是必要的; 例如連續讀同一位址兩次, 連續寫同一位址兩次. 他的提問是, "什麼時候讀/寫執行的順序, 會跟我們用C寫出來, 預期的不一樣". 我馬上想到volatile這個關鍵字, 還有用assemble讓compiler不要最佳化, 但感覺他還有其他想說的; 無奈個人英文不夠好, 交談不下去. 想請問, 這方面還有什麼重要觀念, 關鍵字可以查詢? -- 我張開了手 卻只能抱住風 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.24.76.76

02/20 10:13, , 1F
既然都寫driver了 改改MTRR也是可以的喔 ^_*~~
02/20 10:13, 1F

02/20 10:15, , 2F
上面是亂說的 MMIO可能也是個方向
02/20 10:15, 2F

02/20 20:53, , 3F
也猜MMIO, 也有的是寫了之後馬上讀一次讓HW起作用的樣子
02/20 20:53, 3F

02/20 22:11, , 4F
volatile應該跟 read/write順序無關 Linux kernel中
02/20 22:11, 4F

02/20 22:12, , 5F
的確有一個memory XXX的巨集 用途是避免compiler跨過這行
02/20 22:12, 5F

02/20 22:12, , 6F
進行變數的最佳化 不過 那個XXX 我忘了...
02/20 22:12, 6F

02/20 22:13, , 7F
可能順序不一樣是因為 compiler認為R/W的兩個變數無相關
02/20 22:13, 7F

02/20 22:14, , 8F
so R/W 可能會被最佳化成 W/R
02/20 22:14, 8F
文章代碼(AID): #1DO7UNi3 (C_and_CPP)