OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3616|回复: 4

删除重新发帖

[复制链接]

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-10-15
在线时间
8 小时
发表于 2019-4-4 15:44:44 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 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];        时运行正常,如下图:
am8图片20190404151742456.png
当结构体中间数组是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];或者以上时,同样会出现地址改变的情况。


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

am8图片20190404151753636.png
am8图片2019040415194810.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2013-10-15
在线时间
8 小时
 楼主| 发表于 2019-4-4 15:50:42 | 显示全部楼层
本帖最后由 fuluoce 于 2019-4-4 15:55 编辑

第一次传输图片没成功

am8图片2019040415194810.png
am8图片2019040415174956.png
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14424
金钱
14424
注册时间
2018-8-3
在线时间
1157 小时
发表于 2019-4-4 19:34:59 | 显示全部楼层
帮顶!!!!
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-4-4 20:50:14 | 显示全部楼层
__packed 是告知编译器, 对齐的事不用它管
你让编译器不要管, 而你的结构体又没处理对齐的事

__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, 要不就把这一句放到结构体的最后面
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2019-4-4 20:51:53 | 显示全部楼层
又或者你把__packed删了, 让编译器帮你重新搬到位置, 保证没有对齐的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 04:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表