Вбудоване програмне забезпечення (англ. embedded software) — це комп'ютерне програмне забезпечення, написане для керування машинами або пристроями, відоме як вбудовані системи. Цей термін іноді використовується як взаємозамінний з терміном мікропрограмне забезпечення.[1]
Особливістю вбудованого програмного забезпечення є те, що більшістю його функцій можна керувати виключно за допомогою машинного інтерфейсу, а не через інтерфейс користувача.
Наприклад, виробники використовують вбудоване програмне забезпечення в електроніці автомобілів, телефонів, модемів, роботів, іграшок, систем безпеки, кардіостимуляторів, телевізорів і телеприставок, а також цифрових годинників.
Це програмне забезпечення може бути дуже простим. Наприклад, керування освітленням, що працює на 8-розрядному мікроконтролері з кількома кілобайтами пам'яті з відповідним рівнем складності обробки, визначеним за допомогою системи Probably Approximately Correct Computation[2] (методологія, заснована на увипадковлених алгоритмах). Однак вбудоване програмне забезпечення може мати і складну побудову у таких програмах, як маршрутизатори, елементи оптичної мережі, літаки, ракети та системи керування процесами.[3]
Операційні системи
На відміну від стандартних комп'ютерів, які зазвичай використовують операційні системи, такі як macOS, Windows або Linux, вбудоване програмне забезпечення може не використовувати операційну систему. Код для вбудованого програмного забезпечення зазвичай пишеться на C або C++, але різні мови програмування високого рівня, такі як Java, Python і JavaScript, зараз також широко застосовуються у мікроконтролерах та вбудованих системах.[4] Мови асемблера також часто використовуються, особливо при завантаженні та обробці переривань. Ada використовується в деяких військових та авіаційних проєктах.
Відмінності від прикладного програмного забезпечення
Більшість споживачів знайомі з програмним забезпеченням, яке відповідає за функціональність на комп'ютері. Однак вбудоване програмне забезпечення часто менш помітне, але не менш складне. На відміну від прикладного програмного забезпечення, вбудоване програмне забезпечення має фіксовані вимоги до обладнання та можливості, а додавання стороннього апаратного або програмного забезпечення жорстко контролюється.
Вбудоване програмне забезпечення має включати всі необхідні драйвери пристроїв під час виготовлення, а драйвери пристроїв написані для різних апаратних пристроїв. Ці драйвери пристроїв, які називаються BSP (пакет підтримки плат), утворюють рівень програмного забезпечення, що містить драйвери, специфічні для обладнання та інші підпрограми, які дозволяють конкретній операційній системі (традиційно операційній системі реального часу або RTOS) функціонувати в певному апаратному середовищі (комп'ютер або плата ЦП), інтегрованому з самою ОСРЧ. Програмне забезпечення сильно залежить від обраного ЦП і конкретних мікросхем. Більшість розробників вбудованого програмного забезпечення мають принаймні побіжні знання читання схем і читання таблиць даних компонентів для визначення використання регістрів і системи зв'язку.
Вебпрограми часто використовуються для керування обладнанням, при цьому XML-файли та інші вихідні дані можуть передаватися на комп'ютер для відображення. Зазвичай використовуються файлові системи з папками, однак бази даних SQL часто відсутні.
Розробка програмного забезпечення вимагає використання крос-компілятора, який працює на комп'ютері, але створює виконуваний код для цільового пристрою. Налагодження вимагає використання внутрішньосхемного емулятора та налагоджувального обладнання, такого як JTAG або SWD. Розробники програмного забезпечення часто мають доступ до повного вихідного коду ядра (ОС).
Обсяг пам'яті та оперативної пам'яті може значно відрізнятися. Деякі системи працюють з 16 КБ Flash і 4 КБ оперативної пам'яті з ЦП, який працює на 8 МГц, інші системи можуть конкурувати з сучасними комп'ютерами[5]. Ці вимоги до простору призводять до того, що більше роботи виконується на C або вбудованому C++, замість C++. Інтерпретовані мови, такі як BASIC (тоді як Parallax Propeller може використовувати скомпільований BASIC) і Java (Java ME Embedded 8.3[6] доступна, наприклад, для мікроконтролерів ARM Cortex-M4, Cortex-M7 і старіших ARM11, які використовуються в Raspberry Pi та Intel Galileo Gen) широко не використовуються. В той час як реалізація інтерпретованої мови Python 3 — MicroPython — однак, доступна спеціально для використання мікроконтролерів, напр. 32-розрядні мікроконтролери на основі ARM (наприклад, BBC micro: bit) і 16-розрядні мікроконтролери PIC.[7]
Комунікаційні протоколи
Зв'язок між процесорами та іншими компонентами є важливим. Окрім прямої адресації пам'яті, загальні протоколи апаратного рівня включають I²C, SPI, послідовні порти, 1-Wire, Ethernet та USB.
Комунікаційні протоколи, розроблені для використання у вбудованих системах, доступні у закритому коді від компаній, включаючи InterNiche Technologies та CMX Systems. Протоколи з відкритим кодом походять від uIP, lwip та інших.
Примітки
Посилання
- Edward A. Lee, «Embedded Software», Advances in Computers (M. Zelkowitz, editor) 56, Academic Press, London, 2002.