Альтернативные языки для встроенного программирования

Я ищу языки программирования альтернатив (от блока, C, C++ и основной) к встроенному (микроконтроллер) программирование.

Действительно ли это возможно, например, к микроконтроллерам программы в C# или Java? Возможно, Ruby или Python?

Если возможно, отправьте средства разработки и используемые аппаратные средства.

22
задан Fermi paradox 3 February 2017 в 17:15
поделиться

14 ответов

Существует также Lua. См. eLua.

9
ответ дан 29 November 2019 в 04:50
поделиться

Если вы программируете микроконтроллеры, вам почти всегда нужен C или Embedded C++, все остальное просто занимает слишком много ценной флэш-памяти на чипе. Это единственные два языка, которые я бы рекомендовал, если вы не собираете все вручную (и действительно, кто это делает в наши дни?)

Я использую Embedded C++, как и все остальные, например, на Arduino, я также использую C по большей части на плате ARM, которую я использую.

3
ответ дан 29 November 2019 в 04:50
поделиться

FORTH долгое время был популярен во встроенных системах. У меня нет конкретного опыта работы с ним, но он очень продуман, чтобы обеспечить большую функциональность на небольшом пространстве даже на сложных микроконтроллерах с использованием методов интерпретации многопоточного кода. Это даже довольно быстро для переводчика. Получить среду разработки для FORTH легко, и довольно легко перенести ее на новые системы.

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

Эта тема SO кажется актуальной: https://stackoverflow.com/questions/122292/forth-love-if-honk-then

8
ответ дан 29 November 2019 в 04:50
поделиться

Если вы считаете JavaCard микроконтроллером, то вы можете запрограммировать его на Java.

0
ответ дан 29 November 2019 в 04:50
поделиться

Вы можете написать код на C # в .NET . Вы должны использовать .NET Micro Framework . Но я предпочитаю язык C для таких вещей, как вещи. Я писал на C для процессора ARM7Cortex-M3 с Keil Framework , и эта рабочая среда хорошо работает, эта структура поддерживает многие программные интерфейсы и процессоры.

Примечание: Micro Framework НЕ является ОС реального времени (Мэтью Уайтд из комментариев)

1
ответ дан 29 November 2019 в 04:50
поделиться

Раньше я программировал Zilog Z180's на FORTH. Я бы не хотел делать это снова!

C# можно использовать на .NET Micro, но вам понадобится 32-разрядный процессор с не менее 256 Кб оперативной памяти, и он не подходит для приложений реального времени. Однако для правильного применения он обладает высокой производительностью, и можно нанять кодеров без обширного опыта работы со встроенными системами, если они в дефиците, а опыт работы с C# отсутствует.

Java осуществима, особенно на части с аппаратным исполнением байткода, такой как блок Jazelle на некоторых устройствах ARM9 и более поздних ARM. Однако для этого все равно нужен порт JVM, а это может быть дорого. Обычно он используется как часть встроенного порта Linux, так что у вас также есть все эти накладные расходы, поэтому он, вероятно, еще более требователен к ресурсам, чем .NET Micro.

Intel выпускала очень простой язык под названием PL/M (язык программирования для микрокомпьютеров) для различных процессоров Intel от 4004 до 803286, но он больше не доступен и не поддерживается, и не имеет преимуществ перед C.

Ada широко используется, особенно в военных, авиационных и критически важных приложениях.

Embedded Pascal доступен для некоторых целей.

Вы можете использовать NI LabView в качестве генератора кода для встраиваемых систем. Фактически это то, на чем основан Lego Mindstorms. Однако промышленная версия несколько более сложная и полнофункциональная, чем игрушечная! Аналогичным образом вы можете генерировать встроенный код с помощью MATLAB и SimuLink. Они не обязательно являются самыми эффективными, но для таких задач, как точное управление двигателями и обработка сигналов, SimuLink может быть очень продуктивным.

1
ответ дан 29 November 2019 в 04:50
поделиться

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

Мы заметили, что wikireader работает четвертым или, по крайней мере, имеет несколько четвертых компонентов. Язык, который я никогда не учил, но когда-нибудь смогу.

Плата Dallas Semiconductor TINI («dallas semi» была ассимилирована «maxim») была специально сконструирована как встраиваемая плата JAVA. В результате им пришлось поставить на него тонны оперативной памяти и прошивки по сравнению с обычным микроконтроллером / платой. Я думаю, что эти доски все еще существуют.

В то время, когда появился TINI, существовали аргументы в пользу встраивания java. Возможно, сможет. Я понимаю, что Python похож на java в том смысле, что он интерпретируется или компилируется до общего байтового или машинного кода. В случае JAVA jvm является эмулятором этого общего машинного языка для конкретной цели. Если это так с python, то теоретически python может быть таким же встроенным, как java. Мне сказали, что четвертый основан на стеке или стеке, подобном тому, что такое java, так что это также означает, что четвертый может работать встроенным, также как и java. Пока у вас достаточно оперативной памяти для стека и достаточно места для программ и пропускной способности для виртуальной машины / эмулятора. И в этом заключается проблема. И в этом заключается проблема. RAM и ROM стоят дорого, преобладают в цене и потребителях энергии. Кто хочет заплатить 10 долларов за что-то, чтобы можно было использовать java, когда они могут получить больше от части за 1 доллар с помощью C / asm? По крайней мере, это то, что вам скажет рынок.

С другой стороны, существует мнение, что Linux можно встроить, и люди используют его таким образом. Это означает мегабайты или гигабайты, в которых килобайты сделали бы работу быстрее, лучше и надежнее (хотя, возможно, с более высокими первоначальными затратами на разработку). Таким образом, некоторые из более новых встраиваемых ARM и mips будут иметь ресурсы, которые вы ищете.

Насколько я понимаю, gcc и, возможно, в конечном итоге, если уже не llvm, могут иметь java и другие внешние интерфейсы (например, ada, может быть, pascal). Это означает, что вы можете писать, например, на java, но компилировать его в машинный код для целевого процессора, а не в общий байтовый код Java или как бы он там ни был. Это была бы ваша идеальная ситуация для перехода от языка сценариев к инструкциям реальной машины (при условии, что вы продолжаете заниматься чем-то другим, кроме C / asm).

Краткий ответ: Возможно? Да, возможно. Далласский TINI является или был конкретным примером использования java. Посмотрите также на wikireader, используя то, что вам кажется.

1
ответ дан 29 November 2019 в 04:50
поделиться

Можно попробовать python-on-a-chip, поддерживается на платформах mbed или STM32, переносится и на другие платформы.

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

4
ответ дан 29 November 2019 в 04:50
поделиться

Здесь - это список языков, которые вы можете использовать с 8-битным микроконтроллером AVR. Он включает в себя Basic, Java, Pascal, Python и Scheme. В частности, PyMite реализует подмножество интерпретатора Python.

1
ответ дан 29 November 2019 в 04:50
поделиться

Я использовал пользовательские интерпретаторы pcode на небольших машинах для экономии места в коде.

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

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

Практически все, что вам нужно для начала работы, это опкоды для операнда PUSH/POP (из 8 или 16 байт), ADD/SUB/MUL/DIV, CMP, IF/GOTO и call, и они легко кодируются даже в уродливых наборах инструкций. После этого вы пытаетесь писать подпрограммы, используя CALL, и добавляете опкоды только для выполнения тех вещей, которые пкод не может сделать иначе (ввод/вывод устройства), или которые требуют более быстрой компуляции.

Кодирование в таком интерпретаторе pcode довольно просто даже с ассемблером; вы просто пишете директивы ассемблера "BYTE ", перемежающиеся с директивами "WORD ", в зависимости от того, что хочет опкод.

Этот ответ, по сути, является вариантом ответа на FORTH, который я дал ранее.

5
ответ дан 29 November 2019 в 04:50
поделиться

FORTH имеет свои преимущества на небольших машинах, но есть некоторая кривая обучения.

FORTH имеет много сторон, любая или все из которых могут быть использованы для разработки встраиваемых систем.

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

С одной стороны, маленькие, сырые FORTH былых времен, старые добрые потоковые интерпретаторы FigForth для Z-80, являются ОЧЕНЬ низкоуровневыми в плане среды, которую они предоставляют вам, разработчику. Они, конечно, выше, чем ассемблер, но, возможно (в некоторых случаях), чем C.

Например, из коробки, FORTH (эти маленькие, старые FORTH, о которых многие думают, имея маленькие процессоры) не позволяет вам выделять динамическую память, или делать (простую) арифметику указателей. В нем даже нет "структур" как понятия языка. В основном вы можете играть со смещениями через константы. Изначально вы даже не могли делать рекурсию. Пожалуй, самым большим ограничением языка является то, что в нем нет реальных типов данных. Он вообще не типизирован, это все числа, которые могут быть или не быть указателями на память, которая может быть или не быть данными, символами или чем-то еще.

Конечно, в то же время, вы можете получить полную систему, с ассемблером, редактором и т.д. в пределах 8K оперативной памяти.

Так что, в этом смысле, это, да, более высокий уровень, чем ассемблер, но более низкий, чем Си.

Но (и это большое Но)...

Хотя он может начинаться с низкого уровня, вы, как программист, можете поднять его до любого уровня абстракции, который вас устраивает - вы можете довести его практически до того уровня, до которого захотите.

Вам нужны структуры? Вам нужна куча для malloc? Вам нужна система объектов? Все это доступно для построения на фундаменте.

Вы хотите первоклассную поддержку на уровне языка для вашей маленькой системы записей, основанной на ISAM? Легко.

Рассмотрим Common Lisp. Две его самые мощные возможности - это макросы и Reader, которые дают вам возможность преобразовывать произвольный текст в код, который затем компилируется.

FORTH имеет те же возможности, только он идет еще дальше. В старых FORTH у вас даже есть доступ к самому компилятору, а не только к его входу. Потоковые интерпретаторы чертовски просты, и их легко модифицировать. У вас есть такой "сырой" доступ к образу памяти, что вы можете буквально делать все, что захотите - все из самой системы FORTH.

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

Конечно, на современных "микро" контроллерах вы можете просто перенести всю среду разработки на устройство. Никогда больше не копировать изображение по проводам (конечно, до тех пор, пока вы не создадите его резервную копию).

Все это, конечно, требует работы. Возможно, слишком много работы, но это уже решать дизайнеру/кодеру. Это примитивный набор инструментов, который можно использовать для создания очень мощных вещей.

6
ответ дан 29 November 2019 в 04:50
поделиться

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

О микроконтроллерах с крошечным объемом оперативной памяти, слишком малым для запуска Linux, см. StackOverflow: "Какие существуют интерактивные языки, работающие в крошечной памяти?".

0
ответ дан 29 November 2019 в 04:50
поделиться

Я думаю, что на этот вопрос есть (по крайней мере) два ответа. Во-первых, я хочу подчеркнуть, что если вы программируете близко к аппаратуре и с ограниченными ресурсами, вы обнаружите, что C или C++ - это инструменты, которые подойдут вам лучше всего. Языки высокого уровня не позволяют легко выполнять манипуляции на уровне битов и т.д., но эти вещи легко делаются на C. Частью решения является выяснение того, какой инструмент лучше всего подходит для данной работы, и для низкоуровневых вещей Python или Ruby - это не то, что вам нужно.

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

0
ответ дан 29 November 2019 в 04:50
поделиться

Для Python раньше был интересный проект: Deeply Embedded Python , но я думаю, что он уже давно мертв.

0
ответ дан 29 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: