C语言位操作实际应用

前言

  • 在程序编写中,往往会用到位操作,例如将指定位清0或者置1,这个就用到C语言中最基础当然也是很重要的知识点-----位操作。
  • 在实际应用中,到底是如何使用位移简化逻辑代码和提高运行速度的呢,下面我们就看一个实例。

位操作实际应用

  • 下图中是STM32 Systick控制及状态寄存器(CTRL)
    在这里插入图片描述
  • 因此,我们可以采用宏定义方式,配置对应位段的功能,如下
    代码:
typedef struct
{
 __IO uint32_t CTRL;                         /*!< Offset: 0x00  SysTick Control and Status Register */
 __IO uint32_t LOAD;                         /*!< Offset: 0x04  SysTick Reload Value Register       */
 __IO uint32_t VAL;                          /*!< Offset: 0x08  SysTick Current Value Register      */
 __I  uint32_t CALIB;                        /*!< Offset: 0x0C  SysTick Calibration Register        */
} SysTick_Type;

/* SysTick Control / Status Register Definitions */
#define SysTick_CTRL_COUNTFLAG_Pos         16          //(所在的位段)                   /*!< SysTick CTRL: COUNTFLAG Position */
#define SysTick_CTRL_COUNTFLAG_Msk         (1ul << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */

#define SysTick_CTRL_CLKSOURCE_Pos          2          //(所在的位段)                   /*!< SysTick CTRL: CLKSOURCE Position */
#define SysTick_CTRL_CLKSOURCE_Msk         (1ul << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */

#define SysTick_CTRL_TICKINT_Pos            1          //(所在的位段)                   /*!< SysTick CTRL: TICKINT Position */
#define SysTick_CTRL_TICKINT_Msk           (1ul << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */

#define SysTick_CTRL_ENABLE_Pos             0          //(所在的位段)                   /*!< SysTick CTRL: ENABLE Position */
#define SysTick_CTRL_ENABLE_Msk            (1ul << SysTick_CTRL_ENABLE_Pos)               /*!< SysTick CTRL: ENABLE Mask */
  • 那么如何使用呢?程序中可以这样实现
 /* Choose Fclk、Enable SysTick IRQ and SysTick Timer 、Function successful */
  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;                
}
  • 这样增加即程序的可读性又便于代码维护。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值