博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
位操作相关宏与函数
阅读量:7021 次
发布时间:2019-06-28

本文共 978 字,大约阅读时间需要 3 分钟。

这两个宏和那个函数是我从linux内核中截取出来的,在GCC编译器下(Dev C++)编译器下编译通过。
static inline int test_bit(int nr , const volatile void *addr) //测试位,测试addr的第nr位为0还是为1{    return 1 & (((const volatile unsigned int *)addr)[nr >> 5 ] >> (nr & 31)) ;    }//设置位,把addr的第nr位置1#define set_bit(nr,addr) ({\        register int res;\        __asm__ __volatile__("btsl %2,%3\n\t setb %%al"\            :"=a"(res) :"0" (0),"r"(nr),"m"(*(addr)));\        res;})//清位,把addr的第nr位清0#define clear_bit(nr,addr) ({\        register int res;\        __asm__ __volatile__("btrl %2,%3\n\t setnb %%al"\            :"=a"(res):"0"(0),"r"(nr),"m"(*(addr)));\            res;})

后面这几个是我模仿内核来写的两个以C实现的程序,比较容易理解:

static inline int __set_bit(int nr, const volatile void *addr){      unsigned long *add = (unsigned long *)addr ;    return add[nr/32] |= (1UL << (nr % 32)); }static inline int __clr_bit(int nr , const volatile void *addr){    unsigned long *add = (unsigned long *)addr ;    return add[nr/32] &= ~(1UL << (nr %32));       }

转载地址:http://efcxl.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
Xenserver HA功能配置文档
查看>>
centOS下memcached的安装
查看>>
和lock一起学beego 博客系统开发为例(七)
查看>>
嵌入式操作系统常识及分类
查看>>
在VSAN实验环境下如何将普通HDD标注成SSD
查看>>
生产场景不同角色linux服务器分区案例分享
查看>>
greenplum分区表查看所占空间大小[转]
查看>>
c# ffmpeg wrapper
查看>>
git工作流介绍--结合sourcetree
查看>>
新一代UEFI BIOS UEFI基础知识介绍 (1)
查看>>
阻止OSPF路由
查看>>
python实现的json数据以HTTP GET,POST,PUT,DELETE方式页面请求
查看>>
ubuntu系统下修改mysql数据目录
查看>>
Apache URL Rwrite
查看>>
kubernetes1.8.5集群安装(带证书)
查看>>
ttlsa教程系列之mongodb——(三)mongodb的增删查改
查看>>
shell脚本中实现自动判断用户有无密码
查看>>
自动生成sql代码
查看>>
Nginx打开目录浏览功能(autoindex)
查看>>