你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103 结构体指针问题

[复制链接]
fuluoce 提问时间:2019-4-4 16:09 /
本帖最后由 fuluoce 于 2019-4-4 16:10 编辑



结构体如下:
__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];        时运行正常,如下图:
8dui.png
当结构体中间数组是data_t[8];        时运行不正常,函数形参结构体指针自动改变,如下图:
8cuo.png
网上查说字节对齐问题,我改为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];或者以上时,同样会出现地址改变的情况。
30cuo.png

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


收藏 评论7 发布时间:2019-4-4 16:09

举报

7个回答
wenyangzeng 回答时间:2019-4-4 16:21:17
字节对齐,应该把uint32_t放前面,uint8_t 的最好凑4个,bool放最后

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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,不同的顺序会导致不一样的大小~

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

七哥 回答时间:2019-4-6 13:18:43
还是手动凑4字节吧,管它什么对齐呢!
用内存观察窗口看一下结构体怎么回事

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版