OpenEdv-开源电子网

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

if条件语句为真却不执行if模块语句

[复制链接]

1

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2023-1-7
在线时间
3 小时
发表于 2023-1-7 05:18:24 | 显示全部楼层 |阅读模式
1金钱
第一次遇到这种问题

if语句用按键扫描,扫描到按键按下,并且有输出
输出语句满足if条件
但是if不执行{}内部语句
两个按键放在前面的能正常执行,放在后面的不能正常执行

测试多次发现:
将所有代码注释掉,只留下两个按键的代码,按键中间加1ms延时,时而有时而没有,也不灵敏


从新写了另一种按键扫描能正常运行,但与上面对比,处在同一个位置,类似的框架却能正常运行


请求帮忙看看按键扫面为何会出现if条件满足不执行的原因
(提供了两张图片
  代码和右边串口数据能对应上         按键扫描的代码)

按键扫描

按键扫描

串口对应数据

串口对应数据

最佳答案

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

的确挺怪的,我是没看明白。 要不这样吧,按键扫描改为只在一个地方扫描取值,后面只对这个值作判断:
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-1-7 05:18:25 | 显示全部楼层
mali 发表于 2023-1-7 16:39
大致就是   else if(KEY_Scan(Key_Selectio)==key4_Yes)   这句语句满足条件但不执行后面的{}内容。

的确挺怪的,我是没看明白。
要不这样吧,按键扫描改为只在一个地方扫描取值,后面只对这个值作判断:
  1. u8 key_val=0;
  2. key_val=KEY_Scan(Key_Selectio);
  3. if(key_val==key3_Yes)
  4. {

  5. }
  6. else if(key_val==key4_Yes)
  7. {

  8. }
复制代码


专治疑难杂症
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-1-7 11:42:57 | 显示全部楼层
看看key0_yes的定义
专治疑难杂症
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2023-1-7
在线时间
3 小时
 楼主| 发表于 2023-1-7 12:27:39 | 显示全部楼层
LcwSwust 发表于 2023-1-7 11:42
看看key0_yes的定义

在key.h中定义了

key.h

key.h
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-1-7 12:54:15 | 显示全部楼层
mali 发表于 2023-1-7 12:27
在key.h中定义了

key1_yes为1,无键按下也是return 1,不就无法区分了吗?

专治疑难杂症
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2023-1-7
在线时间
3 小时
 楼主| 发表于 2023-1-7 14:42:08 | 显示全部楼层
LcwSwust 发表于 2023-1-7 12:54
key1_yes为1,无键按下也是return 1,不就无法区分了吗?

哥,还是不行,我把key.c  key.h文件都发出来

key.h

key.h

key.c

key.c
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2023-1-7
在线时间
3 小时
 楼主| 发表于 2023-1-7 14:42:44 | 显示全部楼层
mali 发表于 2023-1-7 14:42
哥,还是不行,我把key.c  key.h文件都发出来

测试和之前遇到的问题还是一样的
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-1-7 16:16:30 | 显示全部楼层
mali 发表于 2023-1-7 14:42
测试和之前遇到的问题还是一样的

问题是啥来着,"if不执行{}内部语句"?能否具体描述一下过程?是哪句没执行?
专治疑难杂症
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2023-1-7
在线时间
3 小时
 楼主| 发表于 2023-1-7 16:34:23 | 显示全部楼层
LcwSwust 发表于 2023-1-7 16:16
问题是啥来着,"if不执行{}内部语句"?能否具体描述一下过程?是哪句没执行?

两个按键key3和key4  
分别用按键扫描
key3在程序前面执行正常
key4按键扫描判断函数在key3按键扫面判断函数下面无法执行
通过串口打印数据,发现两个按键的扫描都正常,都按下并且读到数据,唯独key4不运行
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2023-1-7
在线时间
3 小时
 楼主| 发表于 2023-1-7 16:39:57 | 显示全部楼层
mali 发表于 2023-1-7 16:34
两个按键key3和key4  
分别用按键扫描
key3在程序前面执行正常

大致就是   else if(KEY_Scan(Key_Selectio)==key4_Yes)   这句语句满足条件但不执行后面的{}内容。  
屏幕截图 2023-01-07 045807.jpg
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2023-1-7
在线时间
3 小时
 楼主| 发表于 2023-1-7 20:09:25 | 显示全部楼层
LcwSwust 发表于 2023-1-7 05:18
的确挺怪的,我是没看明白。
要不这样吧,按键扫描改为只在一个地方扫描取值,后面只对这个值作判断:
...

好的,谢谢了,暂时就这样吧
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2023-1-7
在线时间
3 小时
 楼主| 发表于 2023-1-7 20:10:20 | 显示全部楼层
LcwSwust 发表于 2023-1-7 05:18
的确挺怪的,我是没看明白。
要不这样吧,按键扫描改为只在一个地方扫描取值,后面只对这个值作判断:
...

好的,谢谢了,暂时就这样吧,能用了
回复

使用道具 举报

12

主题

156

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2557
金钱
2557
注册时间
2017-12-16
在线时间
188 小时
发表于 2023-1-8 13:30:56 | 显示全部楼层
肯定是逻辑上有问题,想都不用想,单步一下看看
回复

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2016-6-7
在线时间
8 小时
发表于 2023-1-9 16:43:06 | 显示全部楼层
很多时候是MDK优化问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 19:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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