Альтернативные языки для встроенного программирования - PullRequest
22 голосов
/ 15 июня 2010

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

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

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

Ответы [ 18 ]

9 голосов
/ 15 июня 2010

Там также Луа. См. eLua .

8 голосов
/ 15 июня 2010

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

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

Эта тема выглядит так: https://stackoverflow.com/questions/122292/forth-love-if-honk-then

6 голосов
/ 23 июня 2010

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

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

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

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

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

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

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

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

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

Вы хотите структуры?Вы хотите, чтобы куча Malloc от?Вы хотите объектную систему?Все это доступно для здания на фундаменте.

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

Рассмотрим Common Lisp.Две из его самых мощных функций - «Макросы» и «Считыватель», которые дают вам возможность преобразовывать произвольный текст в код, который затем компилируется.

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

Вот как FORTH могут легко «перенести себя» на другие архитектуры, как они могутоптимизировать конкретные структуры данных.Многие старшие ФОРТЫ являются многопоточными переводчиками, но нет причин для этого.Вы можете скомпилировать FORTH в чистый машинный код (т.е. вообще без интерпретатора).

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

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

5 голосов
/ 19 июня 2010

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

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

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

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

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

Этот ответ, по сути, представляет собой вариант БОРТОВОГО ответа бедного человека, который я дал ранее.

4 голосов
/ 19 июня 2010

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

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

3 голосов
/ 15 июня 2010

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

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

1 голос
/ 15 июня 2010

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

1 голос
/ 03 июня 2014

С самого начала Micro Python вышел и предназначен для встраиваемых устройств. http://micropython.org/ https://mail.python.org/pipermail/python-list/2014-June/672994.html

"Поддерживает почти полный синтаксис Python 3, включая yield (составляет 99,99% от Python 3).стандартная библиотека). "

1 голос
/ 19 июня 2010

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

1 голос
/ 16 июня 2010

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

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

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

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

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

Встроенный Паскаль доступен для некоторых целей.

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

...