我想编写一个读取寄存器的内核模块,(返回值保存在unsigned int
中),然后从该变量中读取16到22位,并将其转换为整数。转换没问题。但首先要解决这个问题就是问题所在。
例如,我有这两个十六进制值:
0x88290000d
0x005a0a00d
从这两个值我想要16到22位作为整数,任何想法如何在我的内核模块中实现它?
答案 0 :(得分:2)
以下是提取16到22位(包括7位)的方法:
unsigned int reg = ...
reg
向右移动16,因此位16位于最不重要的位置:reg >>= 16
reg &= 0x7F
注意:以上计数从零开始的位(传统的位编号方式)。
答案 1 :(得分:0)
您可以定义仅对7位(16位至22位)有效的掩码。所以你的面具将被定义为。
mask=0x007F0000 //Your mask
var2=0x00270f00 //Variable which you want to mask
result=mask & var2 // bitwise-and operation to mask the value
result>>=16 // right shift the value to get only this value.
希望这会有所帮助:)