linux arm set_bit分析

本文详细分析了Linux 2.6.11版本中针对ARM平台的set_bit操作,涉及字节序判断、常量检测、汇编实现等。通过对____atomic_set_bit和_set_bit_le/_set_bit_be函数的解析,阐述了如何在不同情况下设置位,并讨论了字节序转换的关键步骤。
摘要由CSDN通过智能技术生成

以下所有分析基于linux-2.6.11

 

一、

根据系统是否定义__ARMEB__”,决定调用下面哪一个宏函数:

#define set_bit(nr,p) ATOMIC_BITOP_LE(set_bit,nr,p)

#define set_bit(nr,p) ATOMIC_BITOP_BE(set_bit,nr,p)

说明:

ARMEB = ARM EABI Big-endian       #大端字节序 
ARMEL = ARM EABI Little-endian    #小端字节序
EABI = Embedded Application Binary Interface

 

二、

#define ATOMIC_BITOP_LE(name,nr,p) \

(__builtin_constant_p(nr) ? \

 ____atomic_##name(nr, p) : \

 _##name##_le(nr,p))

 

#define ATOMIC_BITOP_BE(name,nr,p) \

(__builtin_constant_p(nr) ? \

 ____atomic_##name(nr, p) : \

 _##name##_be(nr,p))

根据参数nr是不是常量,调用不同的函数。

如果nr为常量,则调用:

____atomic_set_bit(nr, p);

函数____atomic_set_bitC语言实现,所以不用考虑大小端的问题

如果nr为常量,则调用:

 _set_bit_le(nr,p));

 _set_bit_be(nr,p));

函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值