Встраиваемая система
Встраиваемая система — это специализированная компьютерная система, представляющая собой комбинацию вычислительного процессора, памяти и периферийных устройств ввода-вывода, выполняющих одну или несколько определённых функций в составе более крупного механического или электронного устройства[1][2]. Она интегрирована в состав готового устройства, зачастую содержит электронные и механические компоненты. Так как встраиваемые системы обычно отвечают за управление физическими процессами устройства, в состав которого они входят, часто предъявляются требования реального времени[3]. По оценкам на 2009 год, 98 % всех выпускаемых микропроцессоров использовались именно во встраиваемых системах[4].
История
Микросхемы на основе интегральных схем с технологией МОП-транзисторов (металло-оксидные полевые транзисторы; MOSFET) были созданы в начале 1960-х годов. Уже к 1964 году МОП-микросхемы превосходили биполярные по плотности размещения транзисторов и стоимости производства. Усложнение МОП-микросхем в соответствии с законом Мура привело к появлению крупноинтегральных схем (LSI), позволивших размещать сотни транзисторов на одном чипе к концу 1960-х. Применение МОП LSI в вычислительной технике позволило создать первые микропроцессоры: инженеры поняли, что весь процессор можно реализовать на нескольких таких чипах[5].
Первым многокристальным микропроцессором стала Four-Phase Systems AL1 (1969), а также MP944 от Garrett AiResearch (1970), оба на основе нескольких МОП-чипов. Первый однокристальный микропроцессор — Intel 4004 — был выпущен в 1971 году; над ним работали Федерико Фаджин (создавший технологию кремниевых затворов), а также инженеры Intel — Марсиан Хофф и Стэн Мазор, при участии Busicom (инженер Масатоси Сима)[6].
Одной из первых современных встраиваемых систем считается навигационный компьютер «Аполлон» (Apollo Guidance Computer)[7], разработанный около 1965 года под руководством Чарльза Дрейпера в лаборатории MIT. Эта система использовала монолитные интегральные схемы для снижения веса и габаритов.
Одной из первых массовых встраиваемых систем являлся вычислитель наведения Autonetics D-17 для ракеты «Минитмэн» (1961). В 1966 году с началом выпуска Минитмэн-2 стали использовать новый вычислитель, что стало первой крупной интеграцией ИС в массовом производстве.
С тех пор встраиваемые системы существенно снизились в цене, а производительность и функциональность резко возросли. Одним из первых микропроцессоров, предназначенных для калькуляторов и малых систем, стал Intel 4004 (1971), но он требовал внешних чипов памяти и поддержки. К началу 1980-х память, устройства ввода-вывода и процессор стали интегрироваться в один микроконтроллер, нашедший применение там, где обычный компьютер был бы слишком дорог. Снижение стоимости микропроцессоров и микроконтроллеров обеспечило массовое распространение встраиваемых систем.
Дешёвый микроконтроллер может выполнять функции множества отдельных компонентов. Даже в потребительских изделиях стало оправдано заменять аналоговые детали (например, потенциометры, переменные конденсаторы) цифровыми элементами, контролируемыми микропроцессором. Хотя такая система зачастую сложнее традиционной, большая часть сложности перенесена в микроконтроллер и софт, а схема устройства упрощается.
Применение
Встраиваемые системы применяются в потребительской электронике, промышленности, транспорте, бытовой технике, медицине, телекоммуникациях, коммерции, авиации и военной технике.
В телекоммуникациях используются встраиваемые системы в коммутаторах сетей и пользовательских мобильных телефонах. Компьютерные сети реализуют специализированные маршрутизаторы и мосты для передачи данных.
В потребительских устройствах — MP3-плееры, телевизоры, мобильные телефоны, игровые приставки, камеры, GPS-приёмники, принтеры. Бытовая техника (микроволновки, стиральные машины, посудомоечные машины) содержит встраиваемые системы для гибкости, эффективности и расширенных функций. Современные системы отопления, вентиляции и кондиционирования используют сетевые термостаты для более точного и эффективного управления. Умный дом опирается на встроенные устройства для управления освещением, климатом, безопасностью, мультимедиа и т. п.
В транспорте современные самолёты используют сложную авионику, включая инерциальные системы и GPS, имеющие строгие требования безопасности. Космические аппараты полагаются на астронику для коррекции траектории. Электродвигатели — от бесщёточных ДПТ до асинхронных — оснащаются электронными контроллерами. Автомобили, электромобили и гибриды все активнее используют встраиваемые системы для повышения эффективности и снижения загрязнения: ABS, ESC/ESP, TCS, автоматические полные приводы.
В медицинской технике — системы мониторинга, визуализации (ПЭТ, ОФЭКТ, КТ, МРТ). В встраиваемых медицинских системах используются промышленные компьютеры[9].
Встроенные системы применяются в критически важных для безопасности отраслях (авиация, оборона). При отсутствии сетевого подключения (например, для IoT-мониторинга и управления) системы могут быть изолированы для повышения безопасности. Для пожарной безопасности системе могут быть обеспечены высокотемпературные режимы работы и устойчивость при отказах коммуникации и питания.
Миниатюрные беспроводные датчики — мота (англ. mote) — формируют сенсорные беспроводные сети. Миниатюризация ИС позволяет объединять эти устройства с полноценной беспроводной подсистемой. Такие моты обычно полностью автономны и работают от батареи годы.
Характеристики
Встраиваемые системы проектируются для выполнения строго определённой задачи, в отличие от универсальных, предназначенных для широкого спектра функций. Некоторые должны отвечать требованиям реального времени, обусловленным безопасностью или эксплуатацией, другие — наоборот, могут быть максимально упрощены ради снижения стоимости.
Встраиваемая система не всегда автономна: часто она является частью большего устройства общего назначения (например, тюнер в электрогитаре Gibson Robot Guitar или управляющая подсистема современного автомобиля)[10].
Программное обеспечение встраиваемых систем называют прошивкой (firmware), оно хранится в ПЗУ или флеш-памяти и работает с сильно ограниченными аппаратными ресурсами (минимум памяти, часто без клавиатуры или дисплея).
Встраиваемые устройства могут вообще не иметь интерфейса (например, при выполнении одной функции) или обеспечивать сложную графику как в настольных ОС. Простые устройства используют кнопки, светодиоды, текстовые или графические ЖКИ с простым меню. Более сложные системы — сенсорный экран, экранные клавиши, гибко переназначаемые функции.
Некоторые системы предоставляют интерфейс удалённо — через последовательное соединение (например, RS-232) или сеть (например, Ethernet) — что упрощает плату и позволяет вынести сложный GUI на ПК (типичный пример — встроенный HTTP-сервер).
Типичный встроенный компьютер мал и экономичен (по сравнению с универсальным), работает в расширенных температурных диапазонах, имеет низкую стоимость, однако жертвует производительностью и ресурсами.
Используются как специализированные микроконтроллеры, так и обычные микропроцессоры с внешней логикой и памятью.
Стандарты PC/104 и PC/104+ — пример готовых модулей для малосерийных, компактных либо защищённых от внешних воздействий решений; они чаще базируются на x86 и существенно компактнее классического ПК, зачастую используют DOS, FreeBSD, Linux, NetBSD, OpenHarmony или встраиваемые операционные системы реального времени — MicroC/OS-II, QNX, VxWorks.
Нередко (где размеры и энергопотребление не важны) применяют обычные компоненты ПК, позволяя использовать стандартные средства разработки и ПО. Однако такие системы всё ещё считаются встроенными (например, банкоматы или игровые автоматы).
Большинство готовых модулей не используют шины компьютерной архитектуры (ISA/PCI), а системы на одном кристалле (SoC — system-on-a-chip) соединяют большую часть логики без стандартных шин.
Существуют миниатюрные вычислительные модули размером с визитку на базе BGA-чипов (например, SoC на ядре ARM), внешней флеш-памяти и DRAM. Производители обеспечивают рабочее ПО и выбор ОС (обычно Linux и RTOS). Широко известны Arduino, Raspberry Pi.
Система на кристалле (SoC) — это полный компьютер на одном чипе: один или несколько процессоров, специализированные блоки (например, графический или сигнальный процессор), различные виды памяти, периферия. SoC реализуется как специализированное ASIC-устройство или программируемая ПЛИС (FPGA).
ASIC характерны для массовых устройств (смартфоны и т. п.), FPGA — для малотиражных изделий с нестандартными требованиями к производительности, интерфейсам и надёжности (например, авионика).
Типичные периферийные устройства:
- Последовательные интерфейсы: RS-232, RS-422, RS-485;
- Синхронные интерфейсы: I2C, SPI, SSC, ESSI;
- USB;
- Носители: SD, CompactFlash;
- Сетевые: Ethernet, WiFi;
- Fieldbus: CAN, LIN, PROFIBUS;
- Таймеры: фазовая автоподстройка (PLL), программируемые интервальные таймеры;
- GPIO;
- Аналого-цифровые и цифро-аналоговые преобразователи;
- Отладка: JTAG, внутрисистемное программирование, порты DB9 и др.
Для разработки ПО применяются компиляторы, ассемблеры, отладчики и специальные инструменты:
- Внутрисхемные отладчики/эмуляторы;
- Утилиты для вставки контрольных сумм/CRC;
- Системы моделирования (например, для систем с цифровой обработкой сигналов);
- Инструменты системного моделирования (библиотечные блоки, имитация поведения, анализ производительности и энергопотребления);
- Средства графического проектирования и генерации кода (UML-диаграммы, моделирование фильтров, контроллеров и т. д.);
- Специализированные компиляторы и линкеры;
- Собственные языки или модифицированные версии (например, Forth, Basic);
- Встраиваемые операционные системы реального времени (RTOS);
- UML-средства кодогенерации на основе машин состояний.
Разработчики пользуются продуктами специализированных ПО-компаний, портированными средствами GNU, иногда инструментами, рассчитанными на ПК, если процессор родственен x86.
С ростом сложности востребованы языки высокого уровня (C++, Rust, Python), а для графических интерфейсов — фреймворки вроде Qt. Выбор инструментов определяется требованиями реального времени, интеграцией с железом и энергоэффективностью.
Современные системы всё чаще требуют сложного ПО, разрабатываемого сторонними организациями — например, для мобильных устройств критичны открытые среды Linux, NetBSD, FreeBSD, OSGi, Embedded Java.
Отладка
Отладка встраиваемых систем проводится на разных уровнях с учётом разных факторов (скорость работы, возможности по установке точек останова и инспекции состояния — памяти, регистров и т. д.).
Типовые методы:
- Проста интерактивная отладка (встроенный shell — чаще в Forth, Basic);
- Программные отладчики без аппаратных изменений, с минимизацией влияния на работу и сохранения данных[11];
- Внешняя отладка через журналы или последовательный порт;
- Внутрисхемный отладчик (ICD) — аппаратное устройство для внешнего управления по JTAG/Nexus-интерфейсу[12];
- Внутрисхемный эмулятор (ICE), целиком заменяющий процессор на эмулируемый;
- Полная эмуляция аппаратной части — все аспекты контролируются и могут модифицироваться (медленно и дорого);
- Для SoC — верификация и отладка на FPGA-плате с помощью интеграции специальных probe-инструментов для доступа к сигналам[13].
Обычно программист может загружать и запускать ПО, просматривать код на разных уровнях (язык высокого уровня, ассемблер).
Системы реального времени часто поддерживают трассировку событий. Графическое представление исполняемого кода строится на ПК по записанному поведению системы: возможно как аппаратное, так и программное выполнение трассировки[14]. Программная трассировка может внедряться макросами, вызываемыми в ключевых точках, и реализующими user-defined hooks.
Встраиваемые системы должны работать непрерывно в течение многих лет, зачастую в случае ошибки самостоятельно восстанавливаться. ПО разрабатывается и тестируется с повышенным вниманием, ненадёжные механические части (например, жёсткий диск) исключаются.
Типовые проблемы:
- Невозможность безопасно остановить/отключить для ремонта (например, космос, подводные кабели, автотранспорт и др.);
- Для безопасности требуется постоянная работа; сбой — недопустим (навигация, управление реактором, химзаводы);
- Крупные финансовые потери при остановке (телеком, производство, лифты, финансовые транзакции).
Техники повышения надёжности:
- Сторожевой таймер (watchdog timer), автоматический перезапуск при сбое;
- Проектирование с архитектурой доверенная вычислительная база[15];
- Применение гипервизоров для ограничения воздействия компрометированных компонентов[16];
- Иммунологическое программирование[17][18];
- Руководства и правила программирования (например, MISRA C/C++) для повышения надёжности и переносимости ПО, предотвращения ошибок времени выполнения (утечек памяти, неверных указателей и т. д.); допускается проверка с помощью статических анализаторов и моделирования временных характеристик кода[17].
Для массовых изделий (например, мобильные телефоны, бытовая электроника) оптимальным является снижение стоимости — выбираются минимальные по мощности и цене компоненты.
В прототипах и малых сериях допустимо использование обычных ПК/ОДК с заменой ОС на RTOS/embedded.
Архитектуры встроенного программного обеспечения
В 1978 году Национальная ассоциация электротехнических производителей США приняла стандарт ICS 3-1978, охвативший программируемые микроконтроллеры (включая одноплатные контроллеры, числовые и событийно-ориентированные контроллеры)[19].
Применяются различные архитектуры ПО.
Простейшая схема — цикл, последовательно опрашивающий входы и вызывающий подпрограммы для управления различными частями оборудования. Такая архитектура называется программно-управляемым вводом-выводом.
В системах, где требуется немедленная реакция, ядром является обработка прерываний (например, по таймеру, по внешнему событию от контроллера порта). Основной цикл выполняет обслуживающие задачи, а длительные задачи могут ставиться в очередь для последующей обработки вне прерываний.
Близка к циклической архитектуре, но цикл спрятан в API[3][1]. Программист определяет множество задач, каждая с собственным контекстом. При простое задача вызывает функцию ожидания, передавая управление другой задаче.
На этом уровне переключение между задачами автоматизировано через прерывания или таймер: появляется полноценное ядро ОС. При отсутствии MMU любые задачи могут повредить данные друг друга, поэтому требуется строгая организация синхронизации доступа — через очереди сообщений, семафоры, неблокирующую синхронизацию.
Из-за сложности часто применяют готовые RTOS. Выбор ОС определяется на ранних стадиях, что ограничивает изменения архитектуры устройства позже[20]. Современные требования приводят к развитию внутреннего middleware наряду с RTOS.
Микроядро отвечает за распределение памяти и переключение контекстов, а файловые системы, сетевые стек и др. работают как отдельные модули.
Экзоядро (exokernel) предоставляет эффективное управление через обычные вызовы подпрограмм, вся система открыта для расширения и модификаций прикладными разработчиками.
Монолитное ядро — масштабное (по меркам embedded) ядро с широкими возможностями, дающее разработчикам привычную среду (напоминая настольные ОС, вроде Linux или Windows). Требует больше аппаратных ресурсов и дороже, менее надёжны и предсказуемы.
Характерные примеры: встраиваемый Linux, VXWorks, Windows CE.
Она набирает популярность там, где ресурсные ограничения не так строги, например, в маршрутизаторах, GPS-устройствах.
В ряде случаев необходимы дополнительные верхнеуровневые компоненты: сетевые стеки (CAN, TCP/IP, FTP, HTTP, HTTPS), файловые системы (FAT), драйверы/кодеки для аудио/видео. В монолитных ядрах они интегрированы в ядро, в RTOS — доступны как опциональные модули.
В автомобильной промышленности распространён стандарт AUTOSAR.
См. также
Примечания
Литература
- John Catsoulis. Designing Embedded Hardware, 2nd Edition : [англ.]. — O'Reilly, май 2005. — ISBN 0-596-00755-8.
- James M. Conrad. Embedded Systems, An Introduction Using the Renesas RX62N Microcontroller : [англ.] / James M. Conrad, Alexander G. Dean. — Micrium, сентябрь 2011. — ISBN 978-1935-7729-96.
- Klaus Elk. Embedded Software Development for the Internet Of Things, The Basics, The Technologies and Best Practices : [англ.]. — CreateSpace Independent Publishing Platform, август 2016. — ISBN 978-1534602533.
Ссылки
- Тенденции в кибербезопасности и встраиваемых системах Dan Geer, ноябрь 2013
- Embedded Systems Week (ESWEEK) — ежегодный форум по встраиваемым системам и программному обеспечению


