OpenEdv-开源电子网

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

关于结构体定于顺序影响实验结果的问题

[复制链接]

7

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2019-4-19
在线时间
34 小时
发表于 2019-7-29 11:05:56 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 feifeizhuer 于 2019-7-29 11:20 编辑

这两天看到ADC这块。发现按图一这样设置,输出结果有时候会不对(大部分时候不行),接3.3v电压采样出来电压2.788v。但是把结构体定义ADC_InitTypeDef  ADC_InitStructure;和ADC_CommonInitTypeDef         ADC_CommonInitStructure;顺序颠倒下,就输出正常。为啥会这样呢?对了是F407探索者板子
QQ截图20190729110403.png

最佳答案

查看完整内容[请看2#楼]

因为结构体在这里都是局部变量,局部变量的初值不知道就是0,相当于结构体的成员随意一个赋值。所以尽量把结构体所以的成员都有效的赋值,或者在最前面调用xxx_StructInit()函数把结构体初始化。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4036
金钱
4036
注册时间
2015-11-14
在线时间
545 小时
发表于 2019-7-29 11:05:57 | 显示全部楼层
因为结构体在这里都是局部变量,局部变量的初值不知道就是0,相当于结构体的成员随意一个赋值。所以尽量把结构体所以的成员都有效的赋值,或者在最前面调用xxx_StructInit()函数把结构体初始化。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-7-30 02:44:27 | 显示全部楼层
帮顶
回复

使用道具 举报

7

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2019-4-19
在线时间
34 小时
 楼主| 发表于 2019-8-6 17:49:44 | 显示全部楼层
Electronic 发表于 2019-7-29 11:05
因为结构体在这里都是局部变量,局部变量的初值不知道就是0,相当于结构体的成员随意一个赋值。所以尽量把 ...

谢谢回复。但我的疑问是为啥结构体声明顺序改变,就会影响输出。而后面的结构体成员都应该被有效赋值了。
回复

使用道具 举报

32

主题

883

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4036
金钱
4036
注册时间
2015-11-14
在线时间
545 小时
发表于 2019-8-7 08:24:54 | 显示全部楼层
feifeizhuer 发表于 2019-8-6 17:49
谢谢回复。但我的疑问是为啥结构体声明顺序改变,就会影响输出。而后面的结构体成员都应该被有效赋值了。

原因还是一样的,你的结构体并没有把每个成员有效的赋值,那就有可能导致某一个成员并不是你需要的值,所以导致初始化错误。你调换顺序为啥又可以,原因也很简单。每个结构体都会占用一定的内存大小,你调换位置以后,那么结构体的内存地址就不一样了,结构体成员的初值也就不一样了,可能刚好符合条件。初始化就没有问题。
回复

使用道具 举报

7

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
139
金钱
139
注册时间
2019-4-19
在线时间
34 小时
 楼主| 发表于 2019-8-13 10:14:09 | 显示全部楼层
Electronic 发表于 2019-8-7 08:24
原因还是一样的,你的结构体并没有把每个成员有效的赋值,那就有可能导致某一个成员并不是你需要的值,所 ...

这么一说我理解了,得好好看下赋值到寄存器里的对不对。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 07:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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