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;或者以上时,同样会出现地址改变的情况。
哪位大神遇到过,求解决办法
字节对齐,应该把uint32_t放前面,uint8_t 的最好凑4个,bool放最后 wenyangzeng 发表于 2019-4-4 16:21
字节对齐,应该把uint32_t放前面,uint8_t 的最好凑4个,bool放最后
有加__align(4) 对齐应该没问题啊我按照你的试试 看一下sizeof,不同的顺序会导致不一样的大小~ 还是手动凑4字节吧,管它什么对齐呢!
用内存观察窗口看一下结构体怎么回事 stm1024 发表于 2019-4-4 16:37
看一下sizeof,不同的顺序会导致不一样的大小~
肯定大小会不一样的, fuluoce 发表于 2019-4-4 16:30
有加__align(4) 对齐应该没问题啊我按照你的试试
BOOL放最前效果好些,但是并没有完全解决问题 理解了对齐规则之后,自己凑齐比较靠谱,当然也可以借助对齐指令。
页:
[1]