set_bit() 等位函数分析! \linux-1.0\linux\include\asm\bitops.h
生活随笔
收集整理的這篇文章主要介紹了
set_bit() 等位函数分析! \linux-1.0\linux\include\asm\bitops.h
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//將addr的第nr(nr為0-31)位置值置為1;
//nr大于31時,把高27的值做為當前地址的偏移,低5位的值為要置為1的位數
extern __inline__ int set_bit(int nr,int * addr)
{ int mask, retval; addr += nr >> 5; //nr大于31時,把高27的值做為當前地址的偏移, mask = 1 << (nr & 0x1f); //獲取31范圍內的值,并把1向左偏移該位數 cli(); //關所有中斷 retval = (mask & *addr) != 0; //位置置1 *addr |= mask; sti(); //開所有中斷 return retval; //返回置數值
} //將addr的第nr(nr為0-31)位置值置為0;
//nr大于31時,把高27的值做為當前地址的偏移,低5位的值為要置為0的位數;
extern __inline__ int clear_bit(int nr, int * addr)
{ int mask, retval; addr += nr >> 5; mask = 1 << (nr & 0x1f); cli(); retval = (mask & *addr) != 0; *addr &= ~mask; sti(); return retval;
} //判斷addr的第nr(nr為0-31)位置的值是否為1;
//nr大于31時,把高27的值做為當前地址的偏移,低5位的值為要判斷的位數;
extern __inline__ int test_bit(int nr, int * addr)
{ int mask; addr += nr >> 5; mask = 1 << (nr & 0x1f); return ((mask & *addr) != 0);
}
總結
以上是生活随笔為你收集整理的set_bit() 等位函数分析! \linux-1.0\linux\include\asm\bitops.h的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 敏感词过滤算法对比,顺便开源了个工具库
- 下一篇: struct task_struct 结