联合体

#pragma pack(1) 
typedef union {     
struct {        
    struct         
          {            
            uint8_t  ch0_h:8;             //!< Byte 0 
            uint8_t  ch0_l:3;             //!< Byte 1             
            uint8_t  ch1_h:5; 
            uint8_t  ch1_l:6;             //!< Byte 2             
            uint8_t  ch2_h:2; 
            uint8_t  ch2_m:8;             //!< Byte 3 
            uint8_t  ch2_l:1;             //!< Byte 4            
            uint8_t  ch3_h:7; 
            uint8_t  ch3_l:4;             //!< Byte 5 
            uint8_t  s1:2;            
            uint8_t  s2:2;        
         }rc; 
 
    struct 
        {             
         int16_t x;                    //!< Byte 6-7    
         int16_t y;                    //!< Byte 8-9   
         int16_t z;                    //!< Byte 10-11      
         uint8_t press_l;              //!< Byte 12        
         uint8_t press_r;              //!< Byte 13       
       }mouse; 
        struct        
       {            
         uint16_t v;                   //!< Byte 14-15    
       }key; 
 
        uint16_t resv;                    //!< Byte 16-17    
      };    
      uint8_t buf[18];                      //!< Union --> Byte<0-17> 
}RC_Ctl_Define_t;

 

上面的就是联合体(又称共用体)的实际例子

①定义方法:typedef union{  } test;

②使用关键点:(1)可以看到      uint8_t buf[18]; 这个数组里面存了之前的结构体变量的值。他们共用一片内存地址。比如buf[0]的值等于ch0_h的值;

③使用好处:单片机的底层,如51某些时候需要按位与或,故  uint8_t  ch0_l:3;代表直接取高三位或者低三位,相当于省略了与的操作(高位数据还是低位数据要看平台的大小端模式,51是大端,stm32默认是小端)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值