• C语言位掩码


    在嵌入式编程的时候,比如对芯片的某个寄存器的某一位置位或清零,可以使用位掩码

    比如 REG是某个8位寄存器

    1 /* 将REG第5位置位 */
    2 REG  |= (1<<5); 
    3 
    4 /* 将REG第2和6位置位 */
    5 REG  |= (1<<2) |(1<<6); 
     /* 将REG第5位清零 */
     REG  &=  ~(1<<5); 
     
     /* 将REG第2和6位清零 */
     REG  &=  ~( (1<<2) | (1<<6) ) ; 

    其实上面的 1<< 5 就是0b000100000,,1<< 2 就是0b00000100 ,1<< 6 就是0b01000000

    从而进一步使用宏定义

    #define BIT2_MASK 0b00000100
    #define BIT5_MASK 0b00100000
    #define BIT6_MASK 0b01000000

    从而程序变为

     /* 将REG第5位置位 */
     REG  |= BIT5_MASK; 
    
     /* 将REG第2和6位置位,两段代码效果一样 */
     REG  |= BIT2_MASK | BIT6_MASK; 
     REG  |= BIT2_MASK + BIT6_MASK; 
    
     /* 将REG第5位清零 */
     REG  &=  ~BIT5_MASK; 
    
    /* 将REG第2和6位清零,两段代码效果一样*/ 
    REG &= ~(BIT2_MASK | BIT6_MASK) ;
    REG &= ~(BIT2_MASK + BIT6_MASK) ;

    其中的BITx_MASK就称为位掩码

    掩码还可以用于:

    1.取出一个变量/寄存器中特定位数的值(高位/低位)

    /* 一般写法 */
    /* 取出变量的高位和低位 */
    uchar_var = 0x34;
    uchar_var >>= 4;/* 取出变量的高位 */
    uchar_var <<= 4;/* 取出变量的低位 */
    /* 使用位掩码 */
    /* 取出变量的高位和低位 */
    #define H4_MASK 0b11110000 
    #define L4_MASK 0b00001111 
    
    uchar_var = 0x34; 
    uchar_var_l = uchar_var & L4_MASK;/*取出变量高位 */ 
    uchar_var_h = (uchar_var & H4_MASK) >> 4;/* 取出变量低位 */

    2.作为判断条件

    #define BIT3_MASK 0b00001000
    #define BIT2_MASK 0b00000100
    #define BIT1_MASK 0b00000010
    
    If( (uchar_var & BIT3_MASK) != 0 )/* bit3是否置位*/
    {
        …
    }
    
    If( (uchar_var & BIT2_MASK) == 0 )/*  bit2是否清零*/
    {
        …
    }
  • 相关阅读:
    HTML5开发在你的游戏应用中加入广告(转)
    AJAX笔试面试题汇总
    jQuery boxy弹出层插件中文演示及讲解(转)
    jquery获取css中的选择器
    post与get在ashx中的取值的区别
    css元素定位和布局
    jquery作用和优势
    css选择器
    css中的框架模型
    javascript中的对Attr(dom中属性)操作
  • 原文地址:https://www.cnblogs.com/sypspace/p/12284098.html
Copyright © 2020-2023  润新知