readb/readw/readl/readq - Linux

By Dinah
at 2016-07-11T21:12
at 2016-07-11T21:12
Table of Contents
開發平台(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
--
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
--
Tags:
Linux
All Comments
Related Posts
grep 擷取內容

By Adele
at 2016-07-11T10:32
at 2016-07-11T10:32
讓每個檔案的修改時間差一秒

By Carol
at 2016-07-11T01:34
at 2016-07-11T01:34
讓每個檔案的修改時間差一秒

By Caroline
at 2016-07-11T00:00
at 2016-07-11T00:00
讓每個檔案的修改直接差一秒

By Brianna
at 2016-07-10T10:45
at 2016-07-10T10:45
systemd

By Andrew
at 2016-07-09T23:47
at 2016-07-09T23:47