我是靠谱客的博主 自然仙人掌,最近开发中收集的这篇文章主要介绍linux 内核 set_bit和clear_bit的用法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

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 。

以下是测试代码:

#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 内核 set_bit和clear_bit的用法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部