繁体   English   中英

linux内核中hweight宏的目的是什么?

[英]What is the purpose of hweight macros in the linux kernel?

在阅读内核中的一些驱动程序代码时,我遇到了hweight8 / hweight16 / hweight32 /... 宏。 我想了解这些宏的用途以及它们的作用,但不幸的是,我找不到有关该主题的任何文档。

宏的定义如下所示,可以在
包括/asm-generic/bitops/const_hweight.h

#define hweight8(w)  (__builtin_constant_p(w) ? __const_hweight8(w)  : __arch_hweight8(w))
#define hweight16(w) (__builtin_constant_p(w) ? __const_hweight16(w) : __arch_hweight16(w))
#define hweight32(w) (__builtin_constant_p(w) ? __const_hweight32(w) : __arch_hweight32(w))
#define hweight64(w) (__builtin_constant_p(w) ? __const_hweight64(w) : __arch_hweight64(w))

好的,找到答案了!

hweight 函数似乎用于计算字节/字中等于 1 的位数。 我不完全理解这个用例,但我在 Linux NAND 驱动程序中找到了这段代码,使用它来检查一个块是否被擦除(所有位都是 1),同时接受一些要翻转的位。

示例调用:

hweight8(1)  --> 1
hweight8(2)  --> 1
hweight8(3)  --> 2
hweight8(4)  --> 1
hweight8(5)  --> 2
hweight8(6)  --> 2
hweight8(7)  --> 3
hweight8(8)  --> 1
and so on...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM