Как прошивки взаимодействуют с электронными устройствами для выполнения своих операций?

StackOverflow https://stackoverflow.com/questions/1761334

  •  21-09-2019
  •  | 
  •  

Вопрос

Почти все электронные устройства поставляются с прошивками.Я знаю, что он хранится в ПЗУ (память только для чтения), поэтому он становится энергонезависимым (для защиты содержимого от стирания, как в ОЗУ, источник питания не требуется).

Что я хочу знать, так это "Как прошивки взаимодействуют с электронными устройствами для выполнения своих операций?" Допустим, есть небольшой ролик..При нажатии кнопки, как это заставляет его двигаться?Может кто-нибудь, пожалуйста, объяснить, что скрывается за этим, чтобы это произошло..Я думаю, что может потребоваться небольшое краткое объяснение, чтобы раскрутить его..

Также какой самый популярный язык используется для кодирования прошивок?

Это было полезно?

Решение

Современное оборудование, подобное тому, которое вы описываете, имеет программу, хранящуюся в ПЗУ, и универсальный микрокомпьютер (CPU), выполняющий эту программу.

Центральный процессор считывает информацию из ПЗУ, настраивая адреса на своей адресной шине, а затем запрашивая ПЗУ сообщить ему значение, хранящееся в этом местоположении.Возникает что-то вроде импульса считывания (на отдельной строке), чтобы сообщить ПЗУ сделать значение доступным по линиям шины данных.Это, в двух словах, и есть чтение.

Чтобы заставить аппаратное обеспечение что-то делать, центральный процессор в основном выполняет своего рода операцию записи.Он помещает значение, представляющее собой всего лишь набор битов, если вы хотите посмотреть на это таким образом, на адресной шине, чтобы выбрать определенное устройство и, возможно, функционировать на этом устройстве, затем он выводит другую сигнальную строку с надписью "write!". Устройство, которое распознает свой адрес по адресной шине, реагирует на этот сигнал, принимая данные из шины данных и затем выполняя любую свою функцию.Как правило, один из битов шины данных будет подключен внутри устройства вывода к выходному каскаду мощности, т.е.транзистор сильнее, чем те, которые используются только для вычислений, и этот транзистор подключит какое-нибудь электрическое устройство к току, достаточному для того, чтобы заставить его двигаться / светиться / что угодно.

Крошечные дешевые устройства закодированы на языке ассемблера для экономии затрат на ПЗУ;в промышленных количествах даже небольшие объемы памяти могут повлиять на цену.Язык ассемблера специфичен для центрального процессора;популярны некоторые чипы под названием "8051", "6502" и "Atmel (что-то вроде)".Более крупные устройства с более сложными требованиями могут иметь встроенное ПО, написанное на C или C-подобном диалекте, что делает программирование немного проще, чем на ассемблере.Самые большие из них даже запускают код на C ++.Скомпилированный, конечно.

Другие советы

В большинстве систем существуют специальные адреса памяти, которые используются для ввода-вывода.Чтение и запись по таким адресам выполняет некоторую функцию вместо простого перемещения данных.В системах x86 для этого также существуют специальные инструкции ввода-вывода.

Простейший случай называется общим параллельным вводом-выводом (GPIO), когда вы можете считывать или записывать данные непосредственно с / на внешние электрические контакты устройства.Существует несколько адресов памяти, называемых регистрами, по которым вы можете считывать данные с порта (напряжение, близкое к 0 = 0, близкое к напряжению питания = 1), куда вы можете записывать данные в порт и где вы можете определить, является ли конкретный вывод входным (соответствующий бит обычно равен 0) или выходным (бит равен 1).Каждый микроконтроллер имеет GPIO.

Итак, в вашем примере кнопка может быть подключена к pin-коду, установленному для ввода, который может быть распознан программным обеспечением.Обычно он делает это каждые 10 мс и реагирует только в том случае, если имеет стабильное значение для нескольких считываний, это называется деблокированием.Затем он записывал бы 1 на какой-нибудь выход, который через какой-нибудь транзистор для усиления мог бы приводить в действие двигатель.Если он почувствует, что вы отпускаете переключатель, он может снова выключить двигатель, написав 0.И так далее, эта программа будет работать до тех пор, пока вы не выключите устройство.

Существует множество других устройств ввода-вывода для других целей с обычно сотнями регистров для управления ими.Если вы хотите увидеть больше, вы могли бы заглянуть в технический паспорт какого-нибудь микроконтроллера.Например, вот технический паспорт ATtiny4/5/9/10, очень маленький контроллер из семейства Atmel AVR.

Сегодня большинство встроенных ПРОГРАММ написано на C, за исключением самых маленьких устройств и небольшого специального кода для обработки сбросов и прерываний, который написан на языке ассемблера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top