在嵌入式实际应用中,大多数的协议结构定义中,都会使用union类型来定义。
使用联合来将较大的对象分解成组成这个对象的各个字节。
typedef union{
char bytes[4];
uint udata;
}data;
可以使用data.udata数组来访问data.bytes[4]字段的各个字节。
注意:
char 占 1 字节
short 占 2 字节,
int 、float 占 4 字节,
double 占8 字节
使用用法:在利用 flash中保存数据信息时
#include "stm32f0xx_flash.h"
#define FLASH_PAGE_SIZE
((uint32_t)0x00000400)
#define FLASH_USER_START_ADDR((uint32_t)0x0800FC00)
#define FLASH_USER_END_ADDR((uint32_t)0x08010000)
//定义需保存用户设置数据的结构
typedef struct //构造结构体 { unsigned char name[16]; float height; float weight; }Personal_Information_TypeDef;
//为了方便变量的使用和在Flash里面的存贮,定义一联合(union)
typedef union
{
uint32_t DataAll[6]; //因为变量结构总共为24bytes,所以为6个32位变量
Personal_Information_TypeDef,inforDataI; } settings_Information;
//申明变量,注意一定要四字节对齐
volatile settings_Information user_seting;
void User_infor_read(void)
{
int i;
uint32_t address_t;
address_t = FLASH_USER_START_ADDR; //flash数据存储起始地址
for(i=0;i
{
user_seting.DataAll[i] = *(__IO uint32_t *)address_t; // 读出所以数据 //*(__IO uint32_t *)address_t =
user_seting.DataAll[i]; //写入数据
address_t += 4;
}
}
由于 user_seting.DataAll[i] ,与 user_seting.inforDataI 共用一块内存,所以可以通过:
user_seting.inforDataI .name[];
user_seting.inforDataI .height;
user_seting. infor DataI .weight;访问数据结构的数据