Концепция планирования в программировании — пользовательский ввод

#c #microcontroller #conceptual

#c #микроконтроллер #концептуальный

Вопрос:

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

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

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

Спасибо

Комментарии:

1. Большая часть микроконтроллера способна обрабатывать прерывания, если вы пишете свою собственную процедуру обслуживания прерываний (ISR). Обычно это срабатывает при обнаружении изменения значения напряжения на определенных выводах.

2. может быть один процессор, два или много. И если вам когда-нибудь разрешили посмотреть, как это было сделано, или вы начали разбирать аппаратное обеспечение, и если вы найдете отмеченные части, то вы можете обнаружить, что некоторые из них реализованы одним способом, а некоторые — другим. Нет причин, по которым вы должны делать это только одним способом.

3. Дайте задачу 100 программистам, и вы должны надеяться на где-то от 1 до 100 различных решений. В ответах уже было описано, что существуют различные способы решения этой проблемы. Когда вы разрабатываете проект, вы понимаете требования и вычислительную мощность, необходимую для удовлетворения этих требований для каждого из ваших проектных предложений, а затем ограничиваетесь одним.

4. Также могут существовать законы, отраслевые стандарты или привычки, которые по соображениям безопасности могут диктовать, как управлять газовым котлом. Точно так же, как компьютер, который фактически управляет вашим современным автомобилем, это не то же самое программное обеспечение, которое управляет дисплеем стерео / часов / радио / etc. Процессоры, которые управляют дисплеем на спинке переднего сиденья в самолете, — это не те процессоры, которые управляют самолетом. Ваш компьютер состоит из множества процессоров, x86 в некоторой степени также запущен. Не из соображений безопасности, а по другим причинам.

Ответ №1:

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

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

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

Отображение работает аналогичным образом. Текущий экран обновляется в зависимости от того, в каком состоянии находится устройство. При обнаружении клавиши UP / DOWN (например) индекс элемента прокрутки изменяется вверх или вниз, и экран перерисовывается в новом состоянии.

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

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

Ответ №2:

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

По сути, прерывание сообщает процессору прекратить то, что он делает, и обработать некоторое событие в реальном времени. По завершении обработки прерываний центральный процессор возобновит выполнение своей первоначальной программы.

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