结构体多类型共享空间 __packed

博客讨论了在嵌入式系统中遇到的数据存储问题,指出在定义数据结构时,使用位字段以节省空间。文章详细展示了如何定义一个包含各种定时器和状态指示灯的结构体,并解释了位字段如何帮助对齐问题。然而,出现了8位数据指针无法正确匹配数据的问题,暗示可能存在内存对齐或数据结构设计上的挑战。
摘要由CSDN通过智能技术生成

今天映到个问题,DATA保存数据老是中间会空出一些空间来,8位数据指针对不上数据。

  


#define SHOW_LEN               56
#define SHOW_ADDR              0x220
typedef    union
{
    u8 data[SHOW_LEN];
  __packed struct
  {
    //开始按钮灯
    u16 StartButtonLed_OnTime          :16;     //0-1 开启时间
    u16 StartButtonLed_OffTime        :16;     //2-3 关闭时间
    u8 StartButtonLed_Times            :8;     // 4周期
    //大灯按钮灯
    u16 BigButtonLed_OnTime            :16;     // 5-6开启时间
    u16 BigButtonLed_OffTime           :16;     // 7-8关闭时间
    u8 BigButtonLed_Times              :8;     // 9周期
    //自动驾驶按钮灯
    u16 AutoButtonLed_OnTime           :16;     // a-b开启时间
    u16 AutoButtonLed_OffTime          :16;     // c-d关闭时间
    u8 AutoButtonLed_Times             :8;     // e周期
    //喇叭
    u16 Laba_OnTime                    :16;     // 开启时间
    u16 Laba_OffTime                   :16;     // 关闭时间
    u8 Laba_Times                      :8;      // 周期
    //状态灯
    u16 StateLed_OnTime                :16;     // 开启时间
    u16 StateLed_OffTime               :16;     // 关闭时间
    u8 StateLed_Times                  :8;     // 周期
    u8 StateLed_State                  :8;     // 状态 0空车, 1有客
    //左大灯
    u16 BigLedLeft_OnTime              :16;     // 开启时间
    u16 BigLedLeft_OffTime             :16;     // 关闭时间
    u8 BigLedLeft_Times                :8;     // 周期
    u8  BigLedLeft_TMode               :8;     // 模式  0 近光灯(圈)闪烁 远光灯关闭
                                               //       1 近光灯(圈)呼吸 远光灯关闭
                                               //       2 近光灯(圈)关闭 远光灯闪烁
                                               //       3 近光灯(圈)关闭 远光灯呼吸
                                               //       4 近光灯(圈)闪烁  远光灯闪烁
                                               //       5 近光灯(圈)闪烁  远光灯呼吸
                                               //       6 近光灯(圈)呼吸  远光灯闪烁
                                               //       7 近光灯(圈)呼吸  远光灯呼吸
    //右大灯
    u16 BigLedRight_OnTime             :16;     // 开启时间  
    u16 BigLedRight_OffTime            :16;     // 关闭时间
    u8 BigLedRight_Times               :8;     // 周期
    u8  BigLedRight_TMode              :8;     // 模式 同上 BigLedLeft_TMode
    //左转向灯
    u16 TurnLedLeft_OnTime             :16;     // 开启时间
    u16 TurnLedLeft_OffTime            :16;     // 关闭时间
    u8 TurnLedLeft_Times               :8;     // 周期
    u8  TurnLedLeft_TMode              :8;     // 模式  0 黄灯转向效果(白灯已关闭)
                                               //       1 白灯效果(黄灯已关闭)
                                               //       2 黄转白灯效果(白灯未关闭)
    //右转向灯
    u16 TurnLedRight_OnTime            :16;     // 开启时间
    u16 TurnLedRight_OffTime           :16;      // 关闭时间
    u8 TurnLedRight_Times              :8;     // 周期
    u8  TurnLedRight_TMode             :8;     // 模式  0 黄灯转向效果(白灯已关闭)
                                               //       1 白灯效果(黄灯已关闭)
                                               //       2 黄转白灯效果(白灯未关闭)
    //刹车灯
    u16 BrakeLed_OnTime                :16;     // 开启时间
    u16 BrakeLed_OffTime              :16;     // 关闭时间
    u8 BrakeLed_Times                 :8;     // 周期
    //平板
    u8 Pingban_OnOff                   :8;     // 平板电源开关 0关闭 1开启
  } bit;

}SHOW_ENUM;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值