• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

epanll

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

2020/2/22 如何用一个结构体union来表示一个32位数

#include <stdio.h>

typedef unsigned char u8;
typedef unsigned short int u16;
typedef unsigned int u32;

//------------报错信息表
typedef union Inverter_FaultMessage_t
{
u32 ALL;
struct
{
u16 BYTE0 : 8;
u16 BYTE1 : 8;
u16 BYTE2 : 8;
u16 BYTE3 : 8;
} BYTE;

struct
{
u16 WORD0 : 16;
u16 WORD1 : 16;
} WORD;

struct
{
//BYTE0
u16 bit0 : 1; //trip zone err
u16 bit1 : 1; //Mains lost
u16 bit2 : 1; //OVP/UVP
u16 bit3 : 1; //OFP/UFP
u16 bit4 : 1; //PLL unlocked
u16 bit5 : 1;
u16 bit6 : 1; //Boost_OCP_Fault
u16 bit7 : 1;
//BYTE1
u16 bit8 : 1;
u16 bit9 : 1;
u16 bit10 : 1;
u16 bit11 : 1;
u16 bit12 : 1;
u16 bit13 : 1;
u16 bit14 : 1;
u16 bit15 : 1;
//BYTE2
u16 bit16 : 1; //internal comms err
u16 bit17 : 1; //rs232(dbgu) comms err
u16 bit18 : 1; //interface comms err
u16 bit19 : 1;
u16 bit20 : 1;
u16 bit21 : 1;
u16 bit22 : 1;
u16 bit23 : 1;
//BYTE3
u16 bit24 : 1;
u16 bit25 : 1;
u16 bit26 : 1;
u16 bit27 : 1;
u16 bit28 : 1;
u16 bit29 : 1;
u16 bit30 : 1;
u16 bit31 : 1;
} BIT;
} Inverter_FaultMessage_t;

Inverter_FaultMessage_t Inverter_Fault;

int main()
{
// Inverter_Fault.BYTE.BYTE0 = 0x12;
// Inverter_Fault.BYTE.BYTE1 = 0x34;
// Inverter_Fault.BYTE.BYTE2 = 0x56;
// Inverter_Fault.BYTE.BYTE3 = 0x78; //结果 78563412 (byte3 << 24) | (byte2 << 16) | (byte1 << 8) | byte0

// Inverter_Fault.WORD.WORD0 = 0x1234;
// Inverter_Fault.WORD.WORD1 = 0x5678; //结果 56781234 (WORD1 << 16) | WORD0

Inverter_Fault.BIT.bit0 = 1;
Inverter_Fault.BIT.bit3 = 1;

Inverter_Fault.BIT.bit28 = 1;
Inverter_Fault.BIT.bit29 = 0;

Inverter_Fault.BIT.bit30 = 1;
Inverter_Fault.BIT.bit31 = 1;

printf("%x \n", Inverter_Fault.ALL );   //结果 d0000009
}

posted on 2021-02-22 23:09  epanll  阅读(167)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3