我很好奇如何在微控制器中处理用户输入,以防止所有其他工作被阻止。
例如,我有现代燃气锅炉--Vaillant,锅炉正在运行他自己的任务,而我可以滚动用户菜单,按下按钮等。 如何从概念的角度来解决这个问题?
是否有另一个微控制器处理用户输入,然后将选定的输入推送到主控制器? 或者主控制器中只有某种类型的scheduller,调度速度如此之快,以至于它可以处理用户输入和后台任务? 如何处理这一点,以便用户可以在不阻止主要任务的情况下使用菜单等。
谢谢
这可以通过许多不同的方式处理,并且根据整个应用程序的复杂性,它可以像超级循环一样简单,也可以像基于多任务的应用程序一样复杂,每个应用程序都有自己的事情(例如,一个做按键检测,另一个处理串行通信,另一个更新[G] LCD等。
您可以使用超级循环方法轻松处理您的特定示例,尽管多任务也可用于编码(IMO)简单性。
例如,使用超级循环方法,每次通过循环时,您都会调用按键检测程序,该程序检查是否按下了按键,只要按键仍然存在,就会将时间计算到最大值。它不会阻止,它会立即退出。当计数达到接受键的最小值(例如,对应于大约50-100毫秒)时,返回按下的键并将计数器归零(用于自动键重复),或将键保存在临时缓冲区中并仅在返回时返回密钥最终被释放(如果不需要自动密钥重复)。
显示器以类似的方式工作。根据设备所处的状态更新当前屏幕。当检测到向上/向下键(例如)时,滚动项的索引向上或向下变化,并且以新状态重新绘制屏幕。
在某些情况下,如果您不希望您的应用程序变成不可调试的混乱标志和ifs,那么多任务是解决此类问题的唯一合理方法。与多个接口(例如,GPS,GSM,用户终端,密钥/ LCD)同时(并且平滑地)处理就是一个这样的示例。
顺便说一句,按键中断是IMO的一种过度杀伤,除非你处于节电状态睡眠模式并且需要硬件方式唤醒。与CPU速度相比,人体按键总是太慢,并且可以通过简单的轮询可靠地检测到。