我是靠谱客的博主 自然仙人掌,这篇文章主要介绍linux 内核 set_bit和clear_bit的用法,现在分享给大家,希望可以做个参考。

set_bit (int nr, volatile unsigned long *addr) : 设置addr内存地址所指向的值的第bit为1.

复制代码
1
2
3
4
5
6
7
int flag=0x01; unsigned long key=0x1110; pr_info("key = 0x%xn", (int)key); set_bit(flag,&key);

如上,设置set_bit开始的内存地址的第1位(flag的值)为 1 ,注意是从0 开始计数的 。

也就是设置 0x1110的bit位的第二位为1 。,所以结果就是 0x1112.

clear_bit (int nr, volatile unsigned long *addr) : 设置addr内存地址所指向的值的第bit为0.

int flag=0x01;
unsigned long key=0x1112
clear_bit(flag,&key);

0x1112 的二进制的最后两位是 10 ,clear第二位之后 就是 00 ,也就是 key 的值变为了 0x1110.

test_bit (int nr, volatile unsigned long *addr) 测试某一位是否为1 。

以下是测试代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <linux/bug.h> /* For BUG_ON. */ #include <linux/init.h> /* Needed for the macros */ #include <linux/kernel.h> /* Needed for pr_info() */ #include <linux/module.h> #define TRUE(condition) BUG_ON(!(condition)) static int __init foo_init(void) { int flag=0x01; unsigned long key=0x1110; pr_info("key = 0x%xn", (int)key); set_bit(flag,&key); pr_info("key = 0x%xn", (int)key); TRUE(key==0x1112); TRUE(test_bit(flag,&key)); clear_bit(flag,&key); pr_info("key = 0x%xn", (int)key); TRUE(key==0x1110); flag=0x04; set_bit(flag,&key); pr_info("key = 0x%xn", (int)key); TRUE(key==(0x1110)); TRUE(test_bit(flag,&key)); flag=0x03; set_bit(flag,&key); pr_info("key = 0x%xn", (int)key); TRUE(key==(0x1118)); clear_bit(flag,&key); TRUE(!test_bit(flag,&key)); TRUE(key==(0x1110)); flag=0x04; clear_bit(flag,&key); TRUE(key==(0x1100)); TRUE(!test_bit(flag,&key)); TRUE(key==(0x1100)); flag = 0x08; change_bit(flag,&key); TRUE(key==(0x1000)); pr_info("key = 0x%xn", (int)key); return 0; } static void __exit foo_cleanup(void) { } module_init(foo_init); module_exit(foo_cleanup); MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Andy"); MODULE_DESCRIPTION("andy one-key driver"); MODULE_ALIAS("one-key");

最后

以上就是自然仙人掌最近收集整理的关于linux 内核 set_bit和clear_bit的用法的全部内容,更多相关linux内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部