打印

学习Linux系统内核驱动之位操作

[复制链接]
2907|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunplusedu2012a|  楼主 | 2013-4-19 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    原子位操作非常快, 因为它们使用单个机器指令来进行操作, 而在任何时候低层平台做的时候不用禁止中断。 函数是体系依赖的并且在 中声明。 它们保证是原子的, 即便在 SMP 计算机上, 并且对于跨处理器保持一致是有用的。

    不幸的是, 键入这些函数中的数据也是体系依赖的。 nr 参数(描述要操作哪个位)常常定义为 int, 但是在几个体系中是 unsigned long. 要修改的地址常常是一个 unsigned long 指针, 但是几个体系使用 void * 代替。

    各种位操作是:
    void set_bit(nr, void *addr);
    设置第 nr 位在 addr 指向的数据项中。
    void clear_bit(nr, void *addr);
    清除指定位在 addr 处的无符号长型数据。 它的语义与 set_bit 的相反。
    void change_bit(nr, void *addr);
    翻转这个位。
    test_bit(nr, void *addr);
    这个函数是唯一一个不需要是原子的位操作; 它简单地返回这个位的当前值。
    int test_and_set_bit(nr, void *addr);
    int test_and_clear_bit(nr, void *addr);
    int test_and_change_bit(nr, void *addr);

    原子地动作如同前面列出的, 除了它们还返回这个位以前的值。

相关帖子

沙发
lu-永| | 2013-4-22 11:31 | 只看该作者
:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我很懒,什么也没有留下

49

主题

78

帖子

1

粉丝