联合体(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 位数据按功能划分,既支持整体操作,也支持按字段访问,适用于需要精确控制位的场景(如嵌入式系统或协议解析)。

相关推荐
Bug退散师7 分钟前
多路IO复用[select版TCP服务器与poll版TCP服务器]与常用网络编程函数详解
linux·服务器·c语言·网络·驱动开发·tcp/ip
集芯微电科技有限公司14 分钟前
各种大小尺寸TFT-LCD面板供电偏压电源方案IC
人工智能·单片机·嵌入式硬件·神经网络·生成对抗网络
FREEDOM_X17 分钟前
嵌入式——定时器工作原理
linux·c语言·单片机·嵌入式硬件·ubuntu
2401_827501281 小时前
51单片机(三)串口通信(UART)、Modbus协议
单片机·嵌入式硬件·51单片机
Acrellea1 小时前
固态变压器(SST)热管理破局:安科瑞交直流专属测温方案护航无人值守运维
运维·网络
振浩微433射频芯片1 小时前
5个IO控制20个LED?查理复用实战拆解
网络·单片机·物联网·学习·智能家居
rcms152702692181 小时前
IS200TREAH2A 终端板
网络
海外数字观察家3 小时前
品未云:泰国华商批发零售一体化 ERP,破解本土软件适配难题|CSDN 技术分享
网络·数据库·人工智能
测功机之家3 小时前
精密传动,可靠测试:杭州索川科技减速机测试台解决方案深度解析
大数据·网络·科技
嵌入式-老费3 小时前
esp32开发与应用(和stm32f103用spi通信)
stm32·单片机·嵌入式硬件