主循环处理时间有点长,导致按键响应不灵敏

2019-10-15 18:39发布

我用SHT10检测温湿度、MQ-2检测烟雾,GPS定位,GSM发送短信。现在我主要加了3个按键进去,就是测试各个模块功能,能不能实现。但是在测试过程中,发现有时按键按下去没有反应,我分析主要原因是:循环中处理模块信息时间太长,导致有时候按键检测到,但是主循环还在处理其他事情。就导致这次的按键失效,就是丢键。不知道有没有大神,能给个思路,怎么及时处理按键响应。才学STM32 的2个月,如果觉得问题问的有点傻,莫怪!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
菜鸟2770
1楼-- · 2019-10-16 13:28
东北小辉辉 发表于 2017-1-6 14:22
这实际上是一个多任务并行的问题,裸机的话,要采用状态机的思想,切碎大状态,每个状态要尽量占用很小的 ...

看来还是学的太少,一直裸奔到现在,要去看看UCOS了,谢谢指教
菜鸟2770
2楼-- · 2019-10-16 18:06
东北小辉辉 发表于 2017-1-6 14:27
如果没学过ucos的话,建议楼主去百度一下“小小调度器”,我们论坛也有网友实现。纯状态机开发的难度比较大 ...

谢谢了!去看一下“小小调度器”
xuyan021
3楼-- · 2019-10-16 20:04
裸机跑也可以,用中断触发标志位,最后在主程序里查标志位去处理。
菜鸟2770
4楼-- · 2019-10-16 22:26
 精彩回答 2  元偷偷看……
东北小辉辉
5楼-- · 2019-10-17 01:37
菜鸟2770 发表于 2017-1-6 15:08
用外部中断么,然后中断处理信息。。。

没那么简单,我举个例子,假设这个按键用外部中断来做。

这个按键是要消抖的把,算这个抖动是10ms,这10ms是用delay死等的方式来做的。

那如果现在单片机正在进行GPS定位,定位到一半,好,按键的外部中断来了,死等了10ms,按键是被识别到了,但是本次的GPS定位的时序就乱了,因为多出了10ms,那本次GPS定位就失败了。
xuyan021
6楼-- · 2019-10-17 04:24
10ms可以用定时器去。我一般方法是用一个基准定时器定一个时间,用一个变量去控制延时的时间。这样就可以最大限度解放控制器的工作了。

一周热门 更多>