联合体(union)

定义案例

cpp 复制代码
//CAN通信标识符结构
union TCANEXID
{
    u32 All;
    struct{
        unsigned DataSeg	: 8;    //数据段
        unsigned DestAddr	: 8;    //目标地址
        unsigned SourAddr	: 7;    //源地址
	    unsigned RQ			: 1;    //帧类型,应答,查询
        unsigned Command    : 3;    //命令		
        unsigned Priority	: 2;    //优先权
        unsigned reserve    : 3;    //对齐
    }Bits;
};

解读

这段代码定义了一个名为 `TCANEXID` 的联合体(`union`),用于将一个 32 位无符号整数(`u32 All`)按位分解为多个具有特定功能的字段。联合体的作用是让同一块内存空间可以通过不同方式访问:既可以作为整体 `All` 操作,也可以按位段 `Bits` 单独操作。

**联合体结构解析**

**1. 联合体成员 `All`**

  • **类型**: `u32`(32 位无符号整数)

  • **作用**: 直接访问整个 32 位数据,用于一次性读写完整的值。

**2. 结构体成员 `Bits`**

通过位域(bit-field)将 32 位划分为多个功能段:

| 字段名 | 位宽 | 说明 |

|--------------|------|--------------------------------------------------------------------|

| `DataSeg` | 8 | **数据段**:可能用于存储数据长度、类型或其他标识信息。 |

| `DestAddr` | 8 | **目标地址**:表示数据的目的地址,范围 0~255。 |

| `SourAddr` | 7 | **源地址**:表示数据的来源地址,范围 0~127。 |

| `RQ` | 1 | **帧类型标志**:用于区分帧是请求(Request)、查询(Query)或应答(Response)。 |

| `Command` | 3 | **指令**:表示具体的操作指令,最多支持 8 种命令(0~7)。 |

| `Priority` | 2 | **优先级**:定义数据的处理优先级,支持 4 个级别(0~3)。 |

| `reserve` | 3 | **保留位**:用于对齐或未来扩展,通常置零。 |

**内存布局**

  • **总位数**: `8 + 8 + 7 + 1 + 3 + 2 + 3 = 32`,与 `u32` 的 32 位完全对齐。

  • **位域顺序**: 取决于编译器和平台(可能从高位到低位或相反),需根据实际场景验证。

拓展

**使用场景**

这种联合体常用于:

  1. **硬件寄存器映射**:直接操作寄存器的特定位。

  2. **通信协议解析**:将数据包按协议格式分解为字段。

  3. **内存优化**:高效利用 32 位空间,同时提供语义化访问。

总结

该联合体通过位域将 32 位数据按功能划分,既支持整体操作,也支持按字段访问,适用于需要精确控制位的场景(如嵌入式系统或协议解析)。

相关推荐
漂洋过海的鱼儿12 分钟前
设计模式——EIT构型(三)
java·网络·设计模式
小渔村的拉线工42 分钟前
18.SPI通信的原理及相关知识
单片机·嵌入式硬件·spi通信·全双工通信·主从机通信
数通工程师42 分钟前
企业级硬件防火墙基础配置实战:从初始化到规则上线全流程
运维·网络·网络协议·tcp/ip·华为
youcans_1 小时前
【动手学STM32G4】(13)STM32G431之 TIM+ADC
stm32·单片机·嵌入式硬件·定时器
血色橄榄枝1 小时前
03 基于Flutter集成网络请求On OpenHarmony
网络·flutter
Godspeed Zhao1 小时前
现代智能汽车中的无线技术41——BT与BLE(0)
网络·汽车
那就回到过去1 小时前
PIM-DM断言机制和剪枝否决机制
网络·tcp/ip·智能路由器·ensp
兔子,你孩子掉了2 小时前
【gd32vf103 折腾】基于gcc+make的开发环境配置
单片机·硬件工程
budingxiaomoli2 小时前
HTTP协议
网络·网络协议·http
橘颂TA2 小时前
【Linux 网络】TCP 拥塞控制与异常处理:从原理到实践的深度剖析
linux·运维·网络·tcp/ip·算法·职场和发展·结构与算法