Основная причина преобладания C и C ++ заключается в том, что среда выполнения является детерминированной для обоих из-за отсутствия требований по сбору мусора. Это делает его хорошим выбором, когда вы должны предоставить гарантии времени выполнения. Не стоит также упоминать, что C многие годы считался «языком ассемблера более высокого уровня».
Еще одним интересным наблюдением является то, что большинству встроенных устройств не требуется или даже нет доступа к сложному уровню графического интерфейса - сотовые телефоны являются очевидным исключением. Большая часть встроенной работы, которую я сделал профессионально, была на арене кабельной приставки, поэтому я могу иметь наклонный взгляд на вещи. И "Нет" , я не считаю приставку жесткой встроенной средой. Мы выросли из-за того, что у нас не было ничего, кроме простой карты памяти того, что «на экране», и очень мало ресурсов. Короче говоря, экранная графика - это упражнение в перевороте с фиксированной шириной в битах - это еще одно место, где указатели в C действительно сияют.
Я действительно не слишком удивлен тем, что Java еще не продвинулась на более «чистый» рынок. Интерпретатор слишком тяжел, хотя Java ME должен был решить эту проблему. Он довольно распространен в мобильных телефонах (например, BREW ) и медленно продвигается на телевизионные и телевизионные рынки (например, и GEM ) но его еще нет и я действительно не уверен, что когда-нибудь будет.
Как уже упоминалось, FORTH является "интерпретируемым" языком, который использовался во многих встроенных средах, а также в довольно многих загрузчиках . Интерпретированные языки могут определенно использоваться в средах реального времени. Хотя не все реализации FORTH интерпретируются. LISP также встроен.
Я думаю, что основными критериями для встраиваемого языка являются:
- детерминированное управление памятью
- доступ к четко определенным размерам битов (все еще не уверен, как LISP вписывается сюда)
- простая среда исполнения
- полностью функциональный или общего назначения
- модель с плоской памятью
Последний пункт, на мой взгляд, наиболее интересен, поэтому я также считаю, что многие языки будут иметь проблемы на рынке встраиваемых систем. Чистые функциональные языки естественным образом подходят для параллелизма и обычно работают в плоской модели памяти. Языки общего назначения работают хорошо, потому что они обычно не запрещают какую-либо конкретную модель потоков, что дает большую гибкость для разработчиков среды выполнения RTOS. Среды виртуальной памяти практически невозможно реализовать, поэтому они являются детерминированными и быстрыми. Это очень затрудняет правильное функционирование языков, для которых требуется поддержка виртуальной памяти.