Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Там также Lua. См. eLua.

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

Примечание. Micro Framework не является оперативной ОС (автор Matthew Whited из комментариев)

Ответ 8

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

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

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

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

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

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

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

Ответ 9

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

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

Плата DINSAL Semiconductor TINI (даллас-полу была ассимилирована максимой) была специально построена как встроенная плата JAVA. В результате они должны были положить тонны плунжера и вспыхнуть на нем относительно обычного микроконтроллера/платы. Я думаю, что эти доски все еще там.

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

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

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

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

Ответ 10

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

Ответ 12

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

Ответ 13

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

Для микроконтроллеров с малым объемом ОЗУ, слишком малым для запуска Linux, см. fooobar.com/questions/82173/....

Ответ 14

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

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

Ответ 15

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

Ответ 16

Вы можете взглянуть на очень мощный AvrCo Multitasking Pascal для AVR. Вы можете попробовать его на http://www.e-lab.de. Версия MEGA8/88 бесплатна. Есть тонны драйверов и симуляторов с отладчиком JTAG и приятные живые или симулированные визуализации всех стандартных устройств (LCD, 7SEG, 14SEG, LEDDOT, KEYBOARD, RC5, SERVO, STEPPER...).

Ответ 17

Для PIC JAL он поставляется с некоторыми хорошими библиотеками.

Ответ 18

Несколько месяцев назад был запущен проект RubimC - Ruby-компилятор и фреймворк для микроконтроллеров с малой памятью. Текущая версия работает, но далеко не реализует все возможности Ruby.