OpenEdv-开源电子网

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

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

[复制链接]

7

主题

31

帖子

0

精华

新手上路

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

最佳答案

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

这类不相关的奇怪问题,可能在程序的其他地方存在使用未初始化的指针之类的问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

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

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

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

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

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

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

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

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

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

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

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

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

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

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

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

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

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

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

使用道具 举报

9

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

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

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

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

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

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

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

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

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

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

使用道具 举报

8

主题

293

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

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

使用道具 举报

7

主题

31

帖子

0

精华

新手上路

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

谢谢您的解决方案
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 04:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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