fuluoce 发表于 2019-4-4 16:09:56

STM32F103 结构体指针问题

本帖最后由 fuluoce 于 2019-4-4 16:10 编辑




结构体如下:
__packed struct AD9362_TypeDef//
{
      uint8_t               id_no;
      //uint8_t               id_no1;
      uint32_t    data_t;               
      bool                        bbdc_track_en;////
      bool                        quad_track_en; /////
      uint32_t                bist_tone_level_dB;
      uint32_t                bist_tone_mask;

} ;
单字节对齐,当结构体中间数组是data_t;      时运行正常,如下图:

当结构体中间数组是data_t;      时运行不正常,函数形参结构体指针自动改变,如下图:

网上查说字节对齐问题,我改为4字节对齐
__align(4) struct AD9362_TypeDef//
{
      uint8_t               id_no;
      //uint8_t               id_no1;
      uint32_t            data_t;               
      bool                        bbdc_track_en;////
      bool                        quad_track_en; /////
      uint32_t                bist_tone_level_dB;
      uint32_t                bist_tone_mask;

} ;
中间数组为 data_t;时确实没问题,但是数组改为 data_t;或者以上时,同样会出现地址改变的情况。


哪位大神遇到过,求解决办法


wenyangzeng 发表于 2019-4-4 16:21:17

字节对齐,应该把uint32_t放前面,uint8_t 的最好凑4个,bool放最后

fuluoce 发表于 2019-4-4 16:30:24

wenyangzeng 发表于 2019-4-4 16:21
字节对齐,应该把uint32_t放前面,uint8_t 的最好凑4个,bool放最后

有加__align(4) 对齐应该没问题啊我按照你的试试

stm1024 发表于 2019-4-4 16:37:19

看一下sizeof,不同的顺序会导致不一样的大小~

toofree 发表于 2019-4-6 13:18:43

还是手动凑4字节吧,管它什么对齐呢!
用内存观察窗口看一下结构体怎么回事

fuluoce 发表于 2019-4-10 12:00:30

stm1024 发表于 2019-4-4 16:37
看一下sizeof,不同的顺序会导致不一样的大小~

肯定大小会不一样的,

fuluoce 发表于 2019-4-10 12:01:09

fuluoce 发表于 2019-4-4 16:30
有加__align(4) 对齐应该没问题啊我按照你的试试

BOOL放最前效果好些,但是并没有完全解决问题

我夏了夏天 发表于 2019-4-10 14:06:28

理解了对齐规则之后,自己凑齐比较靠谱,当然也可以借助对齐指令。
页: [1]
查看完整版本: STM32F103 结构体指针问题