set_bit(nr,p)函数分析
来源:互联网 发布:nba2k17捏脸数据中国人 编辑:程序博客网 时间:2024/06/08 01:14
1.内核代码:
#define set_bit(nr,p)ATOMIC_BITOP_LE(set_bit,nr,p)
#defineATOMIC_BITOP_LE(name,nr,p)\
(__builtin_constant_p(nr) ?\
____atomic_##name(nr, p) :\
_##name##_le(nr,p))
将上面的宏展开为
__builtin_constant_p(nr)?____atomic_set_bit(nr,p):_set_bit_le(nr,p)
nr是常量,该表达式为____atomic_set_bit(nr,p)
2.____atomic_set_bit(nr,p)
static inline void ____atomic_set_bit(unsigned int bit, volatile unsigned long *p)
{
unsigned long flags;
unsigned long mask = 1UL << (bit & 31);
p += bit >> 5;
raw_local_irq_save(flags);
*p |= mask;
raw_local_irq_restore(flags);
}
在32位机上,参数bit的理想取值为0到31,例如取值为1,就表示对*p的bit[1]进行操作。
当bit取值大于31时,函数操作的就不是你想要操作的那个变量*p了(通过p += bit>> 5;语句实现),所以在实际的应用中应该要确保bit的取值在合理的范围内。
*p |= mask;语句实现bit位的置位,如果bit为1,就设置*p的第一位。还有下面两种:
*p &= ~mask;语句实现bit位的清零。
*p ^= mask;语句实现bit位的翻转,即*p的bit位为0时被置位,为1时则被清零。
通过分析不难看出,set_bit就是设置某位。
- set_bit(nr,p)函数分析
- 九、set_bit(int nr,long * addr)
- Linux 内核--fork()函数创建进程 (续)之copy_mem(int nr, struct task_struct *p)
- Linux 内核--fork()函数创建进程 (续)之copy_mem(int nr, struct task_struct *p)
- linux arm set_bit分析
- set_bit()
- set_bit()
- set_bit()
- linux kernel set_bit() 函数解析
- set_bit() 等位函数分析! \linux-1.0\linux\include\asm\bitops.h
- set_bit(unsigned int bit,volatile unsigned long *p)研究
- p函数
- *p++,*++p,++*p(转载)
- VB 函数参考三(P-Z)
- test_bit、set_bit和clear_bit
- *p++ 和 (*p)++
- P-frame 分析 -libx264
- int (*p)[5]分析
- Javascript执行效率小结
- 民间借贷利率利息如何规定
- apache struts 分析
- Oracle OWI 等待事件视图(v$session_wait/v$session_event/v$system_event)
- libjpeg-turbo example
- set_bit(nr,p)函数分析
- 130个非常棒的写给设计人员和开发人员的文章
- 大话K线之反转形态三
- ajax同步,页面显示与html代码不一致
- Xshell登录samba(ubuntu)服务器显示中文乱码
- 黑马程序员_java中的集合3
- Linux0.11内核--几种地址(逻辑地址、线性地址、物理地址)的含义
- 【小蒙淘金】4.16金评-激情燃烧的岁月,你赚了吗?
- STC单片机用户应用程序区和ISP监控程序区的区别