C语言常用位操作宏函数

嵌入式软件工程师常需要配置寄存器的某些位,这些寄存器通常有指定的offset,在通常的32位或者16位中,某位或者某几位表示了一些特定的功能。软件工程师需要配置这些位用以完成特定的任务。如果可以通过宏函数进行封装,将能避免很多重复性的工作并且提高代码的可读性。

宏函数1 读某个寄存器的某几个位

//将寄存器__REGISTER__的_offset_位(从0开始数)开始的__size__个位取出
//寄存器以16位为例,如果32位将0xffff改为0xffffffff
#define GET_BITS(__REGISTER__, _offset_, __size__)\
  do{\
        __REGISTER__ &= ~(~((0xffff >> (16 - __size__)) << _offset_));\
        __REGISTER__ >>= _offset_;\
  }while(0)

宏函数2 写某个寄存器的某几个位

//LET_BITS,将__REGISTER__的__offset__位(从0开始数)开始的__size__个位写__NEW__值


#define CLEAR_BITS(__REGISTER__, __offset__, __size__)\
  do{\
    __REGISTER__ &= (~((0xffff >> (15 - __offset__+ __size__)) << __size__));\
  }while(0)

#define LET_BITS(__REGISTER__, __offset__, __size__, __NEW__)\
  do{\
    CLEAR_BITS(__REGISTER__, __offset__, __size__);\
    __REGISTER__ |= (__NEW__ << __size__);\
  }while(0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值