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

2019-10-15 18:39发布

我用SHT10检测温湿度、MQ-2检测烟雾,GPS定位,GSM发送短信。现在我主要加了3个按键进去,就是测试各个模块功能,能不能实现。但是在测试过程中,发现有时按键按下去没有反应,我分析主要原因是:循环中处理模块信息时间太长,导致有时候按键检测到,但是主循环还在处理其他事情。就导致这次的按键失效,就是丢键。不知道有没有大神,能给个思路,怎么及时处理按键响应。才学STM32 的2个月,如果觉得问题问的有点傻,莫怪!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
东北小辉辉
1楼-- · 2019-10-15 20:05
本帖最后由 东北小辉辉 于 2017-1-6 14:57 编辑
菜鸟2770 发表于 2017-1-6 14:41
看来还是学的太少,一直裸奔到现在,要去看看UCOS了,谢谢指教

程序中不要出现delay死等,是裸机实现多任务的关键。

RTOS也不是万能的,只能说是简化了程序的设计,我们还是要学习RTOS的设计思想,说说我的理解吧,可能不对,你随便看一下。

其实RTOS和裸机的区别,无非就是在任务调度上,RTOS是一个模板,用户划分好任务,直接套在里面,就可以了(但是如何合理的划分任务,仍然是一个难题),因为RTOS每一个任务都有一个虚拟堆栈用来保存当前任务的环境,所以任务就可以从当前的函数中跳出。
裸机的话,由于是共享堆栈,任务一旦进入一个函数就要运行完,所以就要把每个任务分的很细,不能有长时间的延时,遇到大的任务,要把它切碎。

剩下的进程间通信,信号,消息什么的,其实是裸机和OS都有的,比如,裸机一样要注意保护共享资源,临界区什么的,否则,程序一样会出问题。

这方面我也是初学者,希望共同学习。
菜鸟2770
2楼-- · 2019-10-15 22:53
我用SHT10检测温湿度、MQ-2检测烟雾,GPS定位,GSM发送短信。现在我主要加了3个按键进去,就是测试各个模块功能,能不能实现。但是在测试过程中,发现有时按键按下去没有反应,我分析主要原因是:循环中处理模块信息时间太长,导致有时候按键检测到,但是主循环还在处理其他事情。就导致这次的按键失效,就是丢键。不知道有没有大神,能给个思路,怎么及时处理按键响应。才学STM32 的2个月,如果觉得问题问的有点傻,莫怪!!!
东北小辉辉
3楼-- · 2019-10-16 00:20
本帖最后由 东北小辉辉 于 2017-1-6 14:25 编辑
菜鸟2770 发表于 2017-1-6 14:02
我用SHT10检测温湿度、MQ-2检测烟雾,GPS定位,GSM发送短信。现在我主要加了3个按键进去,就是测试各个模块 ...

这实际上是一个多任务并行的问题,裸机的话,要采用状态机的思想,切碎大状态,每个状态要尽量占用很小的时间,不能出现阻塞,设计的难度还是很大的,实在不行,可以套ucos。

问题不应该在加按键的时候出现啊,应该早就出现了。如果你每个任务都是阻塞的,比如在GSM发送短信的过程中,是如何用SHT10检测出温湿度的呢?
楼主不要感觉这是一个简单的问题,这个问题应该是单片机裸奔的核心所在了,就是多任务的程序设计,我现在也是在初学阶段。
东北小辉辉
4楼-- · 2019-10-16 04:52
如果没学过ucos的话,建议楼主去百度一下“小小调度器”,我们论坛也有网友实现。纯状态机开发的难度比较大,用这个“小小调度器”的话,可以用看似阻塞的编程方法实现非阻塞编程。
南有乔木
5楼-- · 2019-10-16 10:04
 精彩回答 2  元偷偷看……
lvkanger
6楼-- · 2019-10-16 10:24
用按键产生中断,在中断中切换主循环状态!如果实时性要求不高应该可以了!

一周热门 更多>