嵌入式编程技巧之------共用体union

嵌入式编程技巧之------共用体union

union简介

共用体是一种特殊的数据类型,为了使用共用体,就必须使用union语句,简单的语法相关知识这里不做详细解释,请大家点击参考➢菜鸟教程


union和struct一起使用

struct是结构体代名词,union是共用体的代名词,将这两者联合在一起使用有时候会减少很多工作量。


应用1------串口通信

下面进行定义

/*定义结构体*/
typedef strcut stdatas
{
	unsigned char head;
	unsigned char data[10];
	unsigned char tail;
}stDatas;

/*定义共用体*/
typedef union undatas
{
	stDatas st;
	unsigned char arr[12];
}unDatas;

/*定义数据*/
unDatas DataTx;

上面定义了需要发送的数据,访问时能够直接进行访问,因为stDatas里面的数据类型都一样,所以内存分配时都是分配的连续地址,因此可以连续访问。结构体具体分配可参考➢菜鸟教程下面的笔记。

DataTx->arr[0]对应DataTx->st->head
DataTx->arr[1]对应DataTx->st->data[0]
. . .
DataTx->arr[10]对应DataTx->st->data[9]
DataTx->arr[11]对应DataTx->st->tail

串口通信基本上都是采用unsigned char(或者叫u8,uint8,uint8_t)类型进行通信,采用这样的数据格式进行发送的时候就减少了转换这一环节,大大节省了CPU的工作效率。


应用1------Flash读写

Flash通常采用unsigned int类型进行读写,因此我们可以进行下面的定义

/*定义结构体*/
typedef strcut stdatas
{
	int a;
	double b;
	float c;
	char d;
	int e;
}stDatas;

/*定义共用体*/
typedef union undatas
{
	stDatas st;
	unsigned int arr[10];	//因为不能系统的计算机的同种数据类型占的字节数不一样,因此这里定义一个比较大的数组
}unDatas;

/*定义数据*/
unDatas FlashData;

这里数据使用的时候只需要访问FlashData->st这个结构体。
进行Flash读写的时候只需要访问FlashData->arr这个数组。


温馨提示:有的地方不建议使用union这种数据类型,是因为里面的数据使用的是同一块存储空间,很容易错误地修改不需要修改的数据,不过C语言既然定义了这种数据类型,那就一定有它的用武之地,只要使用恰当的话一定会给你带来很大的便利。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iot 小胡

从未指望过会有人打赏...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值