OpenEdv-开源电子网

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

违背C语言常识的调试现象,也许是我懂得太少

[复制链接]

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-7-2
在线时间
15 小时
发表于 2017-7-9 21:05:36 | 显示全部楼层 |阅读模式
1金钱
4]5170{27(ZUhJJFOIFW9.png 这个程序一步一步调试的时候有现象出来,然而直接在开发板上运行去没有现象,按键相当于没按下去,很是疑惑,第一次循环时if语句相当于没有作用,直接跳过,疑惑??

最佳答案

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

有一些代码会被优化,那么在线调试时就会跳过,可以试试在options for target 里的C/C++的optimization里设置优化等级,设置之后再试试看
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-5-19
在线时间
15 小时
发表于 2017-7-9 21:05:37 | 显示全部楼层
有一些代码会被优化,那么在线调试时就会跳过,可以试试在options for target 里的C/C++的optimization里设置优化等级,设置之后再试试看
回复

使用道具 举报

14

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2311
金钱
2311
注册时间
2017-2-20
在线时间
229 小时
发表于 2017-7-9 21:38:38 | 显示全部楼层
如果IF语句没有运行的话,根本不可能跳到SWITCH语句里面啊
回复

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2017-7-9 22:59:15 | 显示全部楼层
违背什么常识啊?只有一种可能,你自己基础知识欠缺。
回复

使用道具 举报

3

主题

803

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3791
金钱
3791
注册时间
2017-3-7
在线时间
1651 小时
发表于 2017-7-10 08:19:14 | 显示全部楼层
你自己看下代码,明显是你的if语句的问题,自己思考下
回复

使用道具 举报

84

主题

766

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2759
金钱
2759
注册时间
2015-6-1
在线时间
393 小时
发表于 2017-7-10 08:35:01 | 显示全部楼层
直接不用按键,用导线接上,能不能进?能进也许是防抖或是换个按键,不能进说明你代码有问题,某些地方更改了高低电平状态
自在随心
回复

使用道具 举报

13

主题

175

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2016-4-30
在线时间
141 小时
发表于 2017-7-10 08:59:44 | 显示全部楼层
本帖最后由 执迷 于 2017-7-10 09:11 编辑

如果你没在按键扫描里面处理run、就是不会处理if。。应该是被优化了,执行一次后run=on后再也进不去了,肯定没反应啊。。。。如果你在按键扫描把run=ON,它就进不去按键处理程序了。肯定没反应啊。。。如果你在按键扫描把run=OFF,那是OFF表示开状态机?这个习惯不好,初始化run就等于on,这样应该第一次就不会被跳过吧。。
回复

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2017-7-10 11:18:58 | 显示全部楼层
个人觉得,新手最好用串口调试,仿真调试很多问题说不清。
自己选择的路,成家前走完。
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-7-2
在线时间
15 小时
 楼主| 发表于 2017-7-10 15:04:17 | 显示全部楼层
执迷 发表于 2017-7-10 08:59
如果你没在按键扫描里面处理run、就是不会处理if。。应该是被优化了,执行一次后run=on后再也进不去了,肯 ...

不是,他是第一次循环没进去,也就是run的值没变,但是第二次却进去了,run的值改变了
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-7-2
在线时间
15 小时
 楼主| 发表于 2017-7-10 15:13:31 | 显示全部楼层
学霸君 发表于 2017-7-9 21:38
如果IF语句没有运行的话,根本不可能跳到SWITCH语句里面啊

我上传代码,可以调试试试一下,也许是我这哪里出了故障
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-7-2
在线时间
15 小时
 楼主| 发表于 2017-7-10 15:14:54 | 显示全部楼层
http://pan.baidu.com/s/1geHPc8V这是源程序,有空的话可以下载程序试一下
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-7-2
在线时间
15 小时
 楼主| 发表于 2017-7-10 15:16:06 | 显示全部楼层
黄志豪 发表于 2017-7-10 09:44
有一些代码会被优化,那么在线调试时就会跳过,可以试试在options for target 里的C/C++的optimization里设 ...

谢谢,我试试
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-7-2
在线时间
15 小时
 楼主| 发表于 2017-7-10 15:17:12 | 显示全部楼层
a5820736 发表于 2017-7-10 08:19
你自己看下代码,明显是你的if语句的问题,自己思考下

不懂?
回复

使用道具 举报

3

主题

803

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3791
金钱
3791
注册时间
2017-3-7
在线时间
1651 小时
发表于 2017-7-10 15:32:43 | 显示全部楼层
你一步步算算就好了,系统上电第一次进来,run是不是off,你把它置为on后,以后是不是进不去if语句?自己好好理理逻辑关系
回复

使用道具 举报

5

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2017-7-2
在线时间
15 小时
 楼主| 发表于 2017-7-10 15:39:58 | 显示全部楼层
a5820736 发表于 2017-7-10 15:32
你一步步算算就好了,系统上电第一次进来,run是不是off,你把它置为on后,以后是不是进不去if语句?自己好 ...

我第一次进去赋值给的是OFF,本来第一次进去应该run=ON,但是实际上没变,而是直接跳到switch的第一条语句,我知道他本应该只会执行一次,但是实际上循环第二次才进不去
可以话加Q1286765276,私聊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-12-18 15:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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