[問題] readb/readw/readl/readq

作者: loach98 (銀貨兩訖)   2016-07-11 21:12:20
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
X
問題(Question):
trace linux-3.18/arch/arm64/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):
懇請大大賜教...
作者: bibo9901 (function(){})()   2016-07-11 21:15:00
這是gnu c extension. 把 __v 當作 {} 的回傳值
作者: LPH66 (-6.2598534e+18f)   2016-07-11 21:26:00
作者: loach98 (銀貨兩訖)   2016-07-11 21:51:00
感激兩位大大!!

Links booklink

Contact Us: admin [ a t ] ucptt.com