Ответ 1
Forth довольно популярен для встроенной разработки.
Кроме того, хотя Smalltalk, вероятно, не пользуется популярностью во встроенном сообществе, встроенная разработка определенно популярна в сообществе Smalltalk.
Мне интересно узнать, насколько популярны альтернативы C во встроенном мире разработчика, например. Ада...
Я только когда-либо использовал C (с небольшим количеством ассемблера), но тогда мои цели имеют очень ограниченные ресурсы. Есть ли что-то еще, где в этом пространстве что-то еще? Что выигрывает посуда в приставках?
Если? C, в чем была основная причина?
Спасибо.
Forth довольно популярен для встроенной разработки.
Кроме того, хотя Smalltalk, вероятно, не пользуется популярностью во встроенном сообществе, встроенная разработка определенно популярна в сообществе Smalltalk.
Когда вы говорите "встроенное развитие", имейте в виду, что вам нужно рассмотреть масштаб проекта.
При программировании чего-либо на шкале микроконтроллера или прошивки для ASIC вы склонны видеть, что C и сборка доминируют над сценой. Встроенные разработчики склонны "специализироваться" на этих языках, поскольку компиляторы для них доступны практически для каждой встроенной целевой платформы. Если ваш проект мигрирует с, скажем, чипа с ядром PowerPC на чип с ядром ARM, вы можете быть достаточно уверены, что ваш код C не будет чрезмерно трудным для переноса. Некоторые чипы имеют компиляторы для других языков, но обычно они не соответствуют компилятору C с точки зрения эффективности полученного двоичного файла. Так как вложенные системы часто имеют мало ресурсов, разработчики системы хотят сделать их код максимально эффективным (также одна из причин, почему вы видите много кода языка ассемблера). Я видел инструменты для разработки, доступные для таких языков, как С++, Pascal, Basic и другие, но они, как правило, являются нишевыми инструментами, которые недостаточно зрелы, чтобы соответствовать эффективности доступных компиляторов C. Инструменты отладки для этих языков также, как правило, сложнее найти, чем то, что доступно для сборки C/.
Вы также упомянули телевизионные приставки. Встроенные системы в этом масштабе могут упаковывать эквивалентную мощность настольного компьютера с 7-8 лет назад. Их доступная оперативная память, пространство для хранения и вычислительная мощность позволяют им запускать полнофункциональные операционные системы и интерпретаторы для языков более высокого уровня. На этих более мощных системах вы все равно увидите C и язык ассемблера (для кода драйвера, если ничего больше), но все больше и больше распространены другие языки (такие как Java, Lua, Tcl, Ruby и т.д.). Использование интерпретируемых языков упрощает перенос кода с одной платформы на другую, поскольку платформа имеет достаточные ресурсы для обработки накладных расходов языкового интерпретатора. Любой низкоуровневый код, который напрямую взаимодействует с оборудованием (драйверами), все еще, как правило, использует сборку или C, поскольку языки высокого уровня не всегда имеют возможность делать такие вещи. Все, что работает как приложение поверх встроенной операционной системы, обычно может быть разработано и протестировано внутри эмулятора или виртуальной машины, и поэтому вы увидите, как много кода разрабатывается на любом языке, с которым разработчик оказывается удобным.
Версия TL;DR: C популярна, потому что это универсальный язык, с которым знакомы почти все разработчики. Ассамблея популярна, потому что она обеспечивает доступ к низкоуровневому оборудованию таким образом, который в противном случае был бы трудным или невозможным. Интерпретированные/скриптовые языки, такие как Java, становятся все более популярными, но требования к ресурсам переводчиков для этих языков могут быть слишком большими для некоторых встроенных систем. Качество и разнообразие возможностей разработки/отладки для языков C и ассемблеров также делают эти варианты привлекательными.
Возможно, не совсем большой шаг от C, который вы ищете, но С++ также очень популярен для встроенных проектов.
Я не использовал себя, но Bascom довольно популярен для микроконтроллеров AVR. Это базовая среда разработки, которая позволяет вам легко взаимодействовать с периферийными устройствами. Я встречал людей, которые успешно его использовали.
Да. Java становится все более популярной - многие процессоры добавили инструкции, которые в первую очередь относятся к Java и аналогичным языкам (.net). Кроме того, uclinux работает на микроконтроллерах, поэтому вы можете использовать практически любой язык для некоторых более крупных микросов.
Основные все еще распространены, как и сборка.
Вы увидите Ada в некоторых проектах gov't.
И некоторые инженеры даже помещают Lua и другие интерпретаторы на свои микрофоны, чтобы их клиенты могли расширить функциональность.
Но C по-прежнему доминирует.
-Adam
В начале 90-х я сделал много встроенных разработок на 8051 с использованием Intel PLM51 и операционной системы DCX51.
PLM - очень простой язык, но очень мощный
Теперь мы используем C
Если вы работаете в пространстве смарт-карт, вы можете использовать Java Card. Да, Java, на 8-битном микро. На самом деле это весело. Я должен развиваться в Eclipse, тестировать (и отлаживать!) На симуляторе ПК и быть уверенным, что он будет работать на карте. Просто такая жалкая Java - ужасный язык для встроенных приложений:)
Я использовал EС++ (Embedded С++) довольно широко.
Кроме того, PICBasic был популярен среди PIC'ers для эонов сейчас.
Я использовал Ada во встроенном проекте для военной авионики из-за требований клиентов. Существует много инструментов Ada для встроенной разработки, но большая часть из них очень дорога. Лично я бы просто использовал C.
Существует компилятор Pascal для 8051
Они частично вдохновлены классическим BASIC-Stamp, интерпретатором BASIC, работающим в умеренно мощном ПОС, с самой программой, хранящейся в последовательное EEPROM-устройство.
На работе я все еще поддерживаю встроенную систему клиента, написанную в компилированном стиле BASIC, работающем на процессоре Zilog Z180. 1980 по всему миру, причем большая часть системы все еще построена из 24-битных DIP-пакетов в сокетах. Компилятор работает под CP/M-80, работающим на симуляторе Z80, который сам запускается в симуляторе MS-DOS, встроенном в Windows. Помимо изумления сдвига, что можно сделать что-нибудь продуктивное (и что вы все еще можете купить 27C256 UV erasable EPROMS, и что мой почти 20-летний программист Data/IO PROM все еще работает), я действительно желаю, чтобы клиент мог позволить себе перейти на новый дизайн оборудования, чтобы система могла быть переписана на поддерживаемом языке.
Зависит от микроконтроллера, у многих из них есть C, но компиляторы ужасно, ассемблер, как правило, легко и эффективнее, эффективнее и т.д. Такие, как msp, avr и arm, хороши для компиляторов C и для тех, Я бы использовал и использовал C (в зависимости от проблемы).
Я бы придерживался C или ассемблера, вы тратите память, производительность и ресурсы, используя что-то еще.
Pascal, Modula2 тоже отлично работает. По сути, они в значительной степени эквивалентны C, за исключением невозможности выполнить alloca (хотя некоторые из них имеют это расширение).
Но основной проблемой будет проблема с любым компилятором C: что вы предпочитаете, лучший компилятор/инструментальная цепочка или язык предпочтений.
Несмотря на то, что мне больше нравятся виртинские языки, я просто использую C, и я живу с последствиями, просто потому, что toolchain лучше.
В прошлом были примеры (Pascals или даже скомпилированные основы), но C в основном является нормой. Я никогда не понимал, почему.
Я работал над устройством, которое запускало невероятно старую версию python (1.4 или что-то еще). Не удалось отладить его (кроме сообщений об отладке сообщений), поэтому, когда ваш код попал в исключение, все просто остановилось, а вы поцарапали голову на час. Всякий раз, когда вы делали изменения и обновляли код, который он запускал, потребовалось около 10 минут, чтобы интерпретировать и скомпилировать его.
Излишне говорить, что мы отказались от этого и заменили микроконтроллер на тот, который запускал C.
Смотрите этот вопрос:
Какие языки используются для системного программирования в реальном времени.
В ответ на ваш "почему" вопрос, с точки зрения правительственного/военного приобретения, есть мнение, что Java (язык, платформа и т.д.) является лингва-франкой в наши дни, и что эффект масштаба в язык уменьшит затраты на приобретение и обслуживание. Также есть надежда, что можно эффективно обучить грамотного Java-программиста разумному RT/встроенному программисту на Java быстрее, чем если бы они были необходимы для изучения нового языка. Это обоснование является подозрительным, на мой взгляд, но оно отвечает на вопрос "почему".
Если вы включите iPhone в качестве встроенной платформы, тогда Objective-C
Учитывая, сколько раз у меня было исключение из памяти вне памяти на моем телефоне (большую часть времени я делаю что-то отдаленно интересное), я бы сбежал с Java, как летучая мышь из горячего места.
Я слышал, что Erlang был предназначен для использования на мобильных телефонах. Я думаю, что Lisp - хорошая архитектура для поддержки удаленных устройств - если устройство cna обрабатывает время выполнения.
Многие домашние пользователи и небольшие компании, нуждающиеся в дешевом решении, обнаружили, что Tiny Tiger и Basic STAMP (с использованием BASIC) соответствуют их потребностям.