[問題] readb/readw/readl/readq

看板Linux作者 (銀貨兩訖)時間8年前 (2016/07/11 21:12), 7年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 3.4 @ Cortex-A9/A17 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) X 問題(Question): trace linux-3.4/arch/arm/include/asm/io.h時候, 看到關於readl的描述: #define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; }) 想請教這段語法的意思? (已知iormb是barrier, 可以略過) 看起來是先宣告__v, 讓它去接readl_relaxed(c)的return值, 接著卡一個barrier, 確保read的動作有完成, 但是不太懂為何最後還有一個"__v;", 想請教它的意思是? 附註real_relaxed(c)也用了類似的定義手法 #define readl_relaxed(c) ({ u32 __v = \ le32_to_cpu((__force __le32)__raw_readl(c)); __v; }) 補充說明(Supplement): 懇請大大賜教... 補充: C板有大大幫回答了 https://www.ptt.cc/bbs/C_and_CPP/M.1468242743.A.CCB.html -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.124.166.19 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1468242778.A.7FA.html ※ 編輯: loach98 (59.124.166.19), 07/20/2016 12:19:17
文章代碼(AID): #1NWvjQVw (Linux)