OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 664|回复: 5

这个问题一直想不通

[复制链接]

  离线 

5

主题

9

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2018-2-5
在线时间
9 小时
发表于 2018-2-12 16:25:02 | 显示全部楼层 |阅读模式
这个 按键 如果用第二种方法  就会出问题 失灵  。 但是想不通是哪里的原因。
5e6c5be94293628f.png
回复

使用道具 举报

  离线 

22

主题

696

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
3411
金钱
3411
注册时间
2014-8-13
在线时间
763 小时
发表于 2018-2-12 18:11:09 | 显示全部楼层
第二种方法是多次KEY_Scan()的。设想外部状态先是KEY0_PRES,后KEY1_PRES,方法一理想状态下两次都处理,最差状态下也会处理一次,方法二,理想状态下两次都处理,最差状态下,一次都不处理。一般来说,调用一次KEY_Scan(),那么其所有可能性都要处理掉,方法二中,如果KEY_Scan()中使用了volatile的话,会大大增加出错几率。没有volatile的话,某些缓存优化机制会达到方法一同样的效果
回复 支持 反对

使用道具 举报

  离线 

5

主题

9

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2018-2-5
在线时间
9 小时
 楼主| 发表于 2018-2-14 12:23:23 | 显示全部楼层
mack13013 发表于 2018-2-12 18:11
第二种方法是多次KEY_Scan()的。设想外部状态先是KEY0_PRES,后KEY1_PRES,方法一理想状态下两次都处理,最 ...

方法二最差状态为什么 一次 也不处理?是不是可能按下ko 正好在判断k1 的状态?
回复 支持 反对

使用道具 举报

  离线 

22

主题

696

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
3411
金钱
3411
注册时间
2014-8-13
在线时间
763 小时
发表于 2018-2-14 17:35:08 | 显示全部楼层
aacc 发表于 2018-2-14 12:23
方法二最差状态为什么 一次 也不处理?是不是可能按下ko 正好在判断k1 的状态?

你假定KEY_Scan()的运行时间是2ms,假象一下所有结果就知道了。

方法二,最坏情况:第一个if时,KEY_Scan(0)的结果为KEY0_PRES,不进入if处理流程,进行第二个if判断,第二个if判断同样是进行KEY_Scan(0)扫描,理论上,两次KEY_Scan(0)之间的时间间隔要稍稍高于2ms,2ms时间内,KEY_Scan(0)的结果发生变化可能性还是比较大的,比如第二次KEY_Scan(0)的结果为KEY1_PRES,那么两次if都没有被处理。

实际上,你说用第二种方法就会出现失灵,KEY_Scan(0)的运行时间估计要几十ms了。
回复 支持 反对

使用道具 举报

  离线 

5

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2018-7-19
在线时间
90 小时
发表于 2018-7-31 16:27:15 | 显示全部楼层
aacc 发表于 2018-2-14 12:23
方法二最差状态为什么 一次 也不处理?是不是可能按下ko 正好在判断k1 的状态?

你可 真机智
回复 支持 反对

使用道具 举报

  离线 

24

主题

1239

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2083
金钱
2083
注册时间
2018-5-11
在线时间
395 小时
发表于 2018-7-31 17:49:30 | 显示全部楼层
第一种讲公平,
第二种靠机会
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

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

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

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

GMT+8, 2018-10-22 02:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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