本帖最后由 fuluoce 于 2019-4-4 16:20 编辑
结构体如下:
__packed struct AD9362_TypeDef //
{
uint8_t id_no;
//uint8_t id_no1;
uint32_t data_t[8];
bool bbdc_track_en; ////
bool quad_track_en; /////
uint32_t bist_tone_level_dB;
uint32_t bist_tone_mask;
} ;
单字节对齐,当结构体中间数组是data_t[7]; 时运行正常,如下图:
当结构体中间数组是data_t[8]; 时运行不正常,函数形参结构体指针自动改变,如下图:
网上查说字节并对其问题,我改为4字节对齐
__align(4) struct AD9362_TypeDef //
{
uint8_t id_no;
//uint8_t id_no1;
uint32_t data_t[30];
bool bbdc_track_en; ////
bool quad_track_en; /////
uint32_t bist_tone_level_dB;
uint32_t bist_tone_mask;
} ;
中间数组为 data_t[8];时确实没问题,但是数组改为 data_t[30];或者以上时,同样会出现地址改变的情况。
哪位大神遇到过,求解决办法
你让编译器不要管, 而你的结构体又没处理对齐的事
__packed struct AD9362_TypeDef //
{
uint8_t id_no; <<----这个地址%4 == 0
//uint8_t id_no1;
uint32_t data_t[8]; <<----这个地址%4 == 1, 但它是uint32_t,必须符合地址%4 == 0这一条件
bool bbdc_track_en; ////
bool quad_track_en; /////
uint32_t bist_tone_level_dB;
uint32_t bist_tone_mask;
} ;
要不你就把 uint8_t id_no; 改为uint32_t, 要不就把这一句放到结构体的最后面
一周热门 更多>