OpenEdv-开源电子网

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

GPIO结构体声明位置对初始化的影响问题

[复制链接]

3

主题

14

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-6-13
在线时间
4 小时
发表于 2019-5-19 15:10:44 | 显示全部楼层 |阅读模式
15金钱
在做PWM实验的时候参考着手册写了一个初始化代码,但是呼吸灯现象没有出来(LED灯保持常亮),根据历程进行比较,没有发现异常,猜测是GPIO初始化出现问题,于是将GPIO的初始化和定时器函数的初始化放在一起进行实验,发现依旧失败,但是和例程不同的部分只剩下了结构体声明顺序的不同,于是将结构体顺序进行了调整从而解决了实验中遇到的问题,但是不知道这其中的原理,求解答。
诡异的结构体声明.png

最佳答案

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

这类不相关的奇怪问题,可能在程序的其他地方存在使用未初始化的指针之类的问题。
回复

使用道具 举报

5

主题

145

帖子

0

精华

高级会员

Rank: 4

积分
522
金钱
522
注册时间
2018-8-16
在线时间
172 小时
发表于 2019-5-19 15:10:45 | 显示全部楼层
这类不相关的奇怪问题,可能在程序的其他地方存在使用未初始化的指针之类的问题。
回复

使用道具 举报

3

主题

1432

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2662
金钱
2662
注册时间
2018-8-14
在线时间
382 小时
发表于 2019-5-19 16:21:23 | 显示全部楼层
于是将结构体顺序进行了调整, 是啥意思?
把结构体的定义改了?
还是给结构体不同的字段赋值的顺序改了?
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-6-13
在线时间
4 小时
 楼主| 发表于 2019-5-19 16:22:34 | 显示全部楼层
本帖最后由 舒志远 于 2019-5-19 16:27 编辑
edmund1234 发表于 2019-5-19 16:21
于是将结构体顺序进行了调整, 是啥意思?
把结构体的定义改了?
还是给结构体不同的字段赋值的顺序改了 ...

就是把GPIO_InitTypeDef GPIO_IS;的声明放了第一行就好了

诡异的结构体声明2.png
回复

使用道具 举报

25

主题

1587

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
3001
金钱
3001
注册时间
2018-5-11
在线时间
544 小时
发表于 2019-5-19 20:21:37 | 显示全部楼层
不会出现这种问题,
一定是你其它的因素影响了。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-6-13
在线时间
4 小时
 楼主| 发表于 2019-5-19 21:06:46 | 显示全部楼层
warship 发表于 2019-5-19 20:21
不会出现这种问题,
一定是你其它的因素影响了。

我也觉得奇怪,但是软件模拟发现CR寄存器中的CCPC位被置1
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-6-13
在线时间
4 小时
 楼主| 发表于 2019-5-19 21:23:33 | 显示全部楼层
舒志远 发表于 2019-5-19 21:06
我也觉得奇怪,但是软件模拟发现CR寄存器中的CCPC位被置1

我刚才用样例试了一下也出现了这个问题。
回复

使用道具 举报

543

主题

10万

帖子

32

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
142052
金钱
142052
注册时间
2010-12-1
在线时间
1514 小时
发表于 2019-5-20 02:00:55 | 显示全部楼层
仿真看各个结构体成员的变化,肯定是可以看出差异的。
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-6-13
在线时间
4 小时
 楼主| 发表于 2019-5-23 21:14:10 | 显示全部楼层
正点原子 发表于 2019-5-20 02:00
仿真看各个结构体成员的变化,肯定是可以看出差异的。

仿真的时候看到time寄存器中的CCPC位被置1感觉很奇怪
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-6-13
在线时间
4 小时
 楼主| 发表于 2019-5-23 21:44:35 | 显示全部楼层
正点原子 发表于 2019-5-20 02:00
仿真看各个结构体成员的变化,肯定是可以看出差异的。

但是从C语言变量声明的角度来看不应该出现这种问题
回复

使用道具 举报

7

主题

42

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
332
金钱
332
注册时间
2018-9-21
在线时间
44 小时
发表于 2019-5-24 00:01:07 | 显示全部楼层
结构体声明要放置在语句上面
回复

使用道具 举报

543

主题

10万

帖子

32

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
142052
金钱
142052
注册时间
2010-12-1
在线时间
1514 小时
发表于 2019-5-24 02:40:41 | 显示全部楼层
舒志远 发表于 2019-5-23 21:44
但是从C语言变量声明的角度来看不应该出现这种问题

找问题得看实际情况
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-6-13
在线时间
4 小时
 楼主| 发表于 2019-5-24 20:08:34 | 显示全部楼层
brucewoo 发表于 2019-5-24 08:05
这类不相关的奇怪问题,可能在程序的其他地方存在使用未初始化的指针之类的问题。

好的,我再通过仿真仔细看一下
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-6-13
在线时间
4 小时
 楼主| 发表于 2019-5-24 20:12:07 | 显示全部楼层
brucewoo 发表于 2019-5-19 15:10
这类不相关的奇怪问题,可能在程序的其他地方存在使用未初始化的指针之类的问题。

能问一下您之前是如何解决这类问题的?
回复

使用道具 举报

3

主题

1432

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2662
金钱
2662
注册时间
2018-8-14
在线时间
382 小时
发表于 2019-5-25 00:46:15 | 显示全部楼层
也遇到过类似的问题, 是编译器的问题。
更改一下你的优化级别, 或编译器版本就能解决了
回复

使用道具 举报

5

主题

145

帖子

0

精华

高级会员

Rank: 4

积分
522
金钱
522
注册时间
2018-8-16
在线时间
172 小时
发表于 2019-5-25 14:15:13 | 显示全部楼层
本帖最后由 brucewoo 于 2019-5-25 14:17 编辑
舒志远 发表于 2019-5-24 20:12
能问一下您之前是如何解决这类问题的?

只能慢慢找。没有捷径。反正我的体会是,大多数是使用了未初始化的指针,或者定义了但未分配空间的指针,或未初始化成员值的局部数组。
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2018-6-13
在线时间
4 小时
 楼主| 发表于 2019-5-28 14:25:36 | 显示全部楼层
edmund1234 发表于 2019-5-25 00:46
也遇到过类似的问题, 是编译器的问题。
更改一下你的优化级别, 或编译器版本就能解决了

谢谢您的解决方案
回复

使用道具 举报

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

本版积分规则



关闭

正点原子STM32/FPGA资料免费下载上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2019-6-27 18:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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