Концепция планирования в программировании - пользовательский ввод - PullRequest
1 голос
/ 15 марта 2019

Мне любопытно, как пользовательский ввод обрабатывается в микроконтроллерах таким образом, что вся остальная работа не блокируется.

Например, у меня есть современный газовый котел - Vaillant, котел выполняет свои собственные задачи, а я могу прокручивать меню пользователя, нажимать кнопки и т. Д.
Как это получается с концептуальной точки зрения?

Есть ли другой микроконтроллер, который обрабатывает пользовательский ввод, а затем передает выбранные входы на главный контроллер?
Или в главном контроллере есть какой-то тип планировщика, и он работает так быстро, что может обрабатывать пользовательский ввод и фоновые задачи?
Как это обрабатывается в целом, чтобы пользователь мог поиграться с меню и т. Д., Не блокируя основное задание.

Спасибо

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Это может быть выполнено многими различными способами, и, в зависимости от сложности всего приложения, оно может быть простым, как супер-цикл, или сложным, как приложение, основанное на многозадачности, с несколькими независимыми задачами, каждая из которых выполняет свою задачу.(например, один выполняет обнаружение нажатия клавиши, другой имеет дело с последовательной связью, другой обновляет ЖК-дисплей [G] и т. д.).

Ваш конкретный пример может быть легко обработан с использованием подхода супер-цикла, хотя многозадачностьможет также использоваться для (IMO) простоты в кодировании.

Например, при использовании суперконтурного подхода, каждый раз при прохождении цикла вы вызываете подпрограмму обнаружения нажатия клавиши, которая проверяет, нажата ли клавиша, и считает ли времядо некоторого максимума, пока нажата клавиша все еще присутствует.Не блокирует, выходит сразу.Когда счетчик достигает минимума для принятия клавиши (например, что соответствует примерно 50-100 мсек), вы возвращаете нажатую клавишу и обнуляете счетчик (для автоматического повтора клавиши) или сохраняете клавишу во временном буфере и возвращаете ее только тогда, когдаклавиша в конце концов отпущена (если автоматическое повторение клавиши не требуется).

Дисплей работает аналогичным образом.Текущий экран обновляется в зависимости от того, в каком состоянии находится устройство. Когда клавиша ВВЕРХ / ВНИЗ (например) обнаружена, индекс элемента прокрутки изменяется вверх или вниз, и экран перерисовывается с новым состоянием.

Существуют определенные ситуации, когда многозадачность является единственным разумным способом решения таких проблем, если вы не хотите, чтобы ваше приложение превратилось в неразлаживаемый беспорядок флагов, и ifs.Одновременное (и плавное) взаимодействие с несколькими интерфейсами (например, GPS, GSM, пользовательский терминал, клавиша / ЖК-дисплей) является одним из таких примеров.

Кстати, прерывания для нажатия клавиш являются IMO излишним, если вы не в некоторой батареесохранение спящего режима и нужен аппаратный способ проснуться.Нажатие клавиш человека всегда слишком медленное по сравнению со скоростью процессора и может быть надежно обнаружено простым опросом.

0 голосов
/ 15 марта 2019

Большинство процессоров имеют прерывания в той или иной форме (даже ПК ).

По сути, прерывание говорит ЦПУ прекратить то, что он делает, и обработать какое-то событие в реальном времени. Когда обработчик прерываний завершится, CPU возобновит свою исходную программу.

Более подробная информация о прерываниях доступна в википедии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...