Встраиваемая система

undefined

Встраиваемая система — это специализированная компьютерная система, представляющая собой комбинацию вычислительного процессора, памяти и периферийных устройств ввода-вывода, выполняющих одну или несколько определённых функций в составе более крупного механического или электронного устройства[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-х память, устройства ввода-вывода и процессор стали интегрироваться в один микроконтроллер, нашедший применение там, где обычный компьютер был бы слишком дорог. Снижение стоимости микропроцессоров и микроконтроллеров обеспечило массовое распространение встраиваемых систем.

Дешёвый микроконтроллер может выполнять функции множества отдельных компонентов. Даже в потребительских изделиях стало оправдано заменять аналоговые детали (например, потенциометры, переменные конденсаторы) цифровыми элементами, контролируемыми микропроцессором. Хотя такая система зачастую сложнее традиционной, большая часть сложности перенесена в микроконтроллер и софт, а схема устройства упрощается.

Применение

undefined

Встраиваемые системы применяются в потребительской электронике, промышленности, транспорте, бытовой технике, медицине, телекоммуникациях, коммерции, авиации и военной технике.

В телекоммуникациях используются встраиваемые системы в коммутаторах сетей и пользовательских мобильных телефонах. Компьютерные сети реализуют специализированные маршрутизаторы и мосты для передачи данных.

В потребительских устройствах — MP3-плееры, телевизоры, мобильные телефоны, игровые приставки, камеры, GPS-приёмники, принтеры. Бытовая техника (микроволновки, стиральные машины, посудомоечные машины) содержит встраиваемые системы для гибкости, эффективности и расширенных функций. Современные системы отопления, вентиляции и кондиционирования используют сетевые термостаты для более точного и эффективного управления. Умный дом опирается на встроенные устройства для управления освещением, климатом, безопасностью, мультимедиа и т. п.

В транспорте современные самолёты используют сложную авионику, включая инерциальные системы и GPS, имеющие строгие требования безопасности. Космические аппараты полагаются на астронику для коррекции траектории. Электродвигатели — от бесщёточных ДПТ до асинхронных — оснащаются электронными контроллерами. Автомобили, электромобили и гибриды все активнее используют встраиваемые системы для повышения эффективности и снижения загрязнения: ABS, ESC/ESP, TCS, автоматические полные приводы.

В медицинской технике — системы мониторинга, визуализации (ПЭТ, ОФЭКТ, КТ, МРТ). В встраиваемых медицинских системах используются промышленные компьютеры[9].

Встроенные системы применяются в критически важных для безопасности отраслях (авиация, оборона). При отсутствии сетевого подключения (например, для IoT-мониторинга и управления) системы могут быть изолированы для повышения безопасности. Для пожарной безопасности системе могут быть обеспечены высокотемпературные режимы работы и устойчивость при отказах коммуникации и питания.

Миниатюрные беспроводные датчики — мота (англ. mote) — формируют сенсорные беспроводные сети. Миниатюризация ИС позволяет объединять эти устройства с полноценной беспроводной подсистемой. Такие моты обычно полностью автономны и работают от батареи годы.

Характеристики

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

Встраиваемая система не всегда автономна: часто она является частью большего устройства общего назначения (например, тюнер в электрогитаре Gibson Robot Guitar или управляющая подсистема современного автомобиля)[10].

undefined

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

Пользовательские интерфейсы

undefined

Встраиваемые устройства могут вообще не иметь интерфейса (например, при выполнении одной функции) или обеспечивать сложную графику как в настольных ОС. Простые устройства используют кнопки, светодиоды, текстовые или графические ЖКИ с простым меню. Более сложные системы — сенсорный экран, экранные клавиши, гибко переназначаемые функции.

Некоторые системы предоставляют интерфейс удалённо — через последовательное соединение (например, 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.

ASIC и FPGA SoC

Система на кристалле (SoC) — это полный компьютер на одном чипе: один или несколько процессоров, специализированные блоки (например, графический или сигнальный процессор), различные виды памяти, периферия. SoC реализуется как специализированное ASIC-устройство или программируемая ПЛИС (FPGA).

ASIC характерны для массовых устройств (смартфоны и т. п.), FPGA — для малотиражных изделий с нестандартными требованиями к производительности, интерфейсам и надёжности (например, авионика).

Периферийные устройства

undefined

Типичные периферийные устройства:

  • Последовательные интерфейсы: 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.

Ссылки