OpenEdv-开源电子网

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

移植github上的一个按键程序(探索板)

[复制链接]

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
发表于 2018-8-20 13:57:40 | 显示全部楼层 |阅读模式
本帖最后由 学习stm32f4 于 2018-8-20 18:42 编辑

(新开一个帖子,纯粹是为了方便讨论github上的按键程序)

之前,warship大神分享了一个按键程序,并在原子哥的板子上实现了,功能很强大,感谢warship大神!
后来68楼的leiyitan大神分享了一个github按键程序链接,感谢leiyitan大神!

我抛砖引玉一下,在探索板上移植了github上的按键程序。作者Zibin Zheng代码写的很有水平。
这个按键程序确实逻辑清晰,简化移植。

奉献给大家,欢迎讨论这个按键的思想及C语言实现方法技巧。


Template2.rar

445.44 KB, 下载次数: 142

Template.rar

445.67 KB, 下载次数: 113

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4518
金钱
4518
注册时间
2018-5-11
在线时间
945 小时
发表于 2018-8-21 21:04:33 | 显示全部楼层
这个按键程序的组合按键方式如何实现最好?
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 2 反对 0

使用道具 举报

0

主题

126

帖子

0

精华

高级会员

Rank: 4

积分
502
金钱
502
注册时间
2016-11-28
在线时间
97 小时
发表于 2018-8-21 12:56:18 | 显示全部楼层
回复 支持 0 反对 1

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10571
金钱
10571
注册时间
2017-2-18
在线时间
1914 小时
发表于 2018-8-20 21:55:48 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

0

主题

126

帖子

0

精华

高级会员

Rank: 4

积分
502
金钱
502
注册时间
2016-11-28
在线时间
97 小时
发表于 2018-8-21 08:05:42 | 显示全部楼层
我只是开森的Git抄袭者,那个按键程序,配合该作者的软定时器,更加如鱼得水。 公司多款产品已经用的这个。
回复 支持 反对

使用道具 举报

17

主题

329

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2532
金钱
2532
注册时间
2016-3-6
在线时间
393 小时
发表于 2018-8-21 08:38:07 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4518
金钱
4518
注册时间
2018-5-11
在线时间
945 小时
发表于 2018-8-21 12:36:36 来自手机 | 显示全部楼层
leiyitan 发表于 2018-8-21 08:05
我只是开森的Git抄袭者,那个按键程序,配合该作者的软定时器,更加如鱼得水。 公司多款产品已经用的这个。

软定时器怎么讲?有链接吗
回复 支持 反对

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4518
金钱
4518
注册时间
2018-5-11
在线时间
945 小时
发表于 2018-8-21 12:41:57 来自手机 | 显示全部楼层
感谢分享,我昨天也移植了一下,原作者确实功底不错,也比较好用。不过,总体来说,复杂了一些,比我那个程序占用资源多太多了,包括CPU的计算资源。
回复 支持 反对

使用道具 举报

0

主题

126

帖子

0

精华

高级会员

Rank: 4

积分
502
金钱
502
注册时间
2016-11-28
在线时间
97 小时
发表于 2018-8-21 12:58:41 | 显示全部楼层
本帖最后由 leiyitan 于 2018-8-21 12:59 编辑
warship 发表于 2018-8-21 12:41
感谢分享,我昨天也移植了一下,原作者确实功底不错,也比较好用。不过,总体来说,复杂了一些,比我那个程 ...

楼主可以用调试工具还有看看map文件到底需要消耗多少CPU,多少内存,我具体还真没有去探究究竟会消耗多少资源。我最多的做了32个按键还有部分组合按键,好像没发现什么的,103rct6处理器
回复 支持 反对

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2018-8-21 13:32:14 | 显示全部楼层
leiyitan 发表于 2018-8-21 12:56
https://github.com/0x1abin/MultiTimer

作者的小工具真好用,很容易移植到原子哥的例程里。感谢分享。

Template.rar

446.26 KB, 下载次数: 63

回复 支持 反对

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4518
金钱
4518
注册时间
2018-5-11
在线时间
945 小时
发表于 2018-8-21 21:15:36 | 显示全部楼层
leiyitan 发表于 2018-8-21 12:58
楼主可以用调试工具还有看看map文件到底需要消耗多少CPU,多少内存,我具体还真没有去探究究竟会消耗多少 ...

这个除了看MAP文件查看内存外,可以肯定是多了不少的。
除此之外,我感觉主要是在运行时占用的CPU时间是很多的,
因为每5ms就要遍历一遍所有的BUTTON结构链表,
反复通过链表中函数指针调用读GPIO端口的值,压栈出栈的工作量也不小。
而实际项目中按键真正工作的时间往往不到万分之一,
当然如果CPU时间充裕的情况下也无所谓的。
但不论如何,感谢您提供了这么优秀的程序链接,
从中可以学到不少编程思想和技巧。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2018-8-21 21:39:06 | 显示全部楼层
本帖最后由 学习stm32f4 于 2018-8-21 21:44 编辑
warship 发表于 2018-8-21 21:04
这个按键程序的组合按键方式如何实现最好?

水平有限,需要请高手讨论一下,组合按键如何实现才好?
回复 支持 反对

使用道具 举报

0

主题

126

帖子

0

精华

高级会员

Rank: 4

积分
502
金钱
502
注册时间
2016-11-28
在线时间
97 小时
发表于 2018-8-21 21:45:00 | 显示全部楼层
本帖最后由 leiyitan 于 2018-8-21 21:48 编辑
warship 发表于 2018-8-21 21:15
这个除了看MAP文件查看内存外,可以肯定是多了不少的。
除此之外,我感觉主要是在运行时占用的CPU时间是 ...

这程序在整个运行过程中都在不停的扫描遍历结构体确实是有点浪费体力的,如果项目中只有一两个按键的话,用外部中断很省CPU体力。我一般都用的50ms的扫描周期
回复 支持 反对

使用道具 举报

31

主题

1955

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4518
金钱
4518
注册时间
2018-5-11
在线时间
945 小时
发表于 2018-8-21 22:08:30 来自手机 | 显示全部楼层
学习stm32f4 发表于 2018-8-21 21:39
水平有限,需要请高手讨论一下,组合按键如何实现才好?

我想了一下,组合按键的话,用查询方式可以实现,就是判断某两个键同时Press_Down
回复 支持 反对

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
 楼主| 发表于 2018-8-21 23:07:14 | 显示全部楼层
warship 发表于 2018-8-21 22:08
我想了一下,组合按键的话,用查询方式可以实现,就是判断某两个键同时Press_Down

感谢提醒。原作者给出了一个使用查询方式例子。稍微修改,测试了一下,可以的。

Template.rar

445.34 KB, 下载次数: 56

回复 支持 反对

使用道具 举报

5

主题

277

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1522
金钱
1522
注册时间
2014-5-16
在线时间
217 小时
发表于 2018-8-21 23:29:34 | 显示全部楼层
按键都是比较好处理的,我对那个定时器有点看法,1ms的时基中断在程序的整个生命周期都存在,这将影响某些高实时性系统的正确运行,同时不利于超低功耗系统节能.
相对的另一种定时器思路,就是动态设置定时周期,只在定时器超时时才产生中断,可参考LoRaWAN的定时器代码,也可参考蓝牙BLE的定时器.
回复 支持 反对

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1702
金钱
1702
注册时间
2012-5-10
在线时间
439 小时
发表于 2018-8-29 14:46:24 | 显示全部楼层
有一定用处,但是也有一个最大的弊端:按键的产生事件和消耗事件必然在同一个线程,如果能异步就好了
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 05:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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