Встроенное программное обеспечение — это компьютерное программное обеспечение , написанное для управления машинами или устройствами, которые обычно не считаются компьютерами, обычно называемыми встроенными системами . Обычно он специализирован для конкретного оборудования , на котором работает, и имеет ограничения по времени и памяти. [1] Этот термин иногда используется как синоним прошивки . [2]
Точная и стабильная характерная особенность заключается в том, что не все функции встроенного программного обеспечения инициируются/управляются через человеческий интерфейс , а вместо этого — через машинные интерфейсы. [3]
Например, производители встраивают программное обеспечение в электронику автомобилей , телефонов, модемов, роботов , бытовой техники, игрушек, систем безопасности, кардиостимуляторов , телевизоров и телеприставок, а также цифровых часов . [4] Это программное обеспечение может быть очень простым, например, для управления освещением, работающего на 8-битном микроконтроллере с несколькими килобайтами памяти, с подходящим уровнем сложности обработки, определяемым с помощью структуры «вероятно приблизительно корректных вычислений» [5] (методология, основанная на рандомизированные алгоритмы ). Однако встроенное программное обеспечение может стать очень сложным в таких приложениях, как маршрутизаторы , элементы оптических сетей, самолеты , ракеты и системы управления технологическими процессами . [6]
В отличие от стандартных компьютеров, которые обычно используют такие операционные системы, как macOS , Windows или Linux , встроенное программное обеспечение может не использовать операционную систему. Когда они все-таки используют одну, можно выбрать широкий спектр операционных систем, обычно операционную систему реального времени . Код встроенного программного обеспечения обычно пишется на C или C++ , но в настоящее время для микроконтроллеров и встроенных систем широко используются и различные языки программирования высокого уровня , такие как Java , Python и JavaScript . [7] Языки ассемблера также часто используются, особенно при загрузке и обработке прерываний . Ада используется в некоторых военных и авиационных проектах.
Большинство потребителей знакомы с прикладным программным обеспечением , обеспечивающим функциональность компьютера. Однако встроенное программное обеспечение часто менее заметно, но не менее сложно. В отличие от прикладного программного обеспечения, встроенное программное обеспечение имеет фиксированные аппаратные требования и возможности, а добавление стороннего оборудования или программного обеспечения строго контролируется.
Встроенное программное обеспечение должно включать все необходимые драйверы устройств на этапе производства, причем драйверы устройств пишутся для различных аппаратных устройств. Эти драйверы устройств, называемые BSP ( пакет поддержки платы ), образуют уровень программного обеспечения, содержащий драйверы для конкретного оборудования и другие процедуры, которые позволяют конкретной операционной системе (традиционно операционной системе реального времени или RTOS) функционировать в определенной аппаратной среде. (компьютер или карта ЦП), интегрированная с самой ОСРВ. Программное обеспечение сильно зависит от процессора и конкретных выбранных чипов. Большинство инженеров встраиваемого программного обеспечения обладают хотя бы поверхностными знаниями в области чтения схем и листов данных для компонентов, чтобы определить использование регистров и системы связи. Преобразование между десятичными , шестнадцатеричными и двоичными числами полезно, а также использование битовых манипуляций . [8]
Веб-приложения часто используются для управления оборудованием, хотя файлы XML и другие выходные данные могут передаваться на компьютер для отображения. Обычно используются файловые системы с папками, однако базы данных SQL часто отсутствуют.
Разработка программного обеспечения требует использования кросс-компилятора , который работает на компьютере, но создает исполняемый код для целевого устройства. Для отладки требуется использование внутрисхемного эмулятора и оборудования для отладки, такого как отладчики JTAG или SWD . Разработчики программного обеспечения часто имеют доступ к полному исходному коду ядра (ОС).
Размер оперативной памяти и оперативной памяти может существенно различаться. Некоторые системы работают с 16 КБ флэш-памяти и 4 КБ ОЗУ с процессором, работающим на частоте 8 МГц, другие системы могут конкурировать с современными компьютерами. [9] Эти требования к пространству приводят к тому, что больше работы выполняется на C или встроенном C++ вместо C++. Интерпретируемые языки, такие как BASIC (в то время как, например, Parallax Propeller может использовать скомпилированный BASIC) и Java (Java ME Embedded 8.3 [10] доступна, например, для микроконтроллеров ARM Cortex-M4 , Cortex-M7 и более старых ARM11, используемых в Raspberry Pi и Intel Galileo Gen. 2). ) обычно не используются; в то время как реализация интерпретируемого языка Python 3 — MicroPython — доступна специально для использования в микроконтроллерах, например, 32-битные микроконтроллеры на базе ARM (например, BBC micro:bit ) и 16-битные микроконтроллеры PIC .
Связь между процессорами, а также между одним процессором и другими компонентами имеет важное значение. Помимо прямой адресации памяти , общие протоколы аппаратного уровня включают I²C , SPI , последовательные порты , 1-Wires , Ethernet и USB .
Протоколы связи, предназначенные для использования во встроенных системах, доступны в виде закрытого исходного кода от таких компаний, как InterNiche Technologies и CMX Systems . Протоколы с открытым исходным кодом происходят от uIP , lwip и других.