Ответ 1
Существует множество версий Tcl для встроенного программирования:
Я ищу языки программирования общего назначения, которые
Ниже мой список, что мне не хватает?
Существует множество версий Tcl для встроенного программирования:
Я слышал, что CHIP-8, XPL0, PicoC и Objective Caml были перенесены в графические калькуляторы. Статья в Википедии "Lego Mindstorms" содержит список языков программирования, которые предположительно работают на платформе Lego RCX или Lego NXT. Кто-нибудь из них отвечает вашим критериям "живого кодирования"?
Возможно, вы захотите проверить другой микроконтроллер Forths в Forth wiki. В нем перечисляются как минимум 4 Forths для AVM Atmel: amforth (о котором вы уже упоминаете), PFAVR, avrforth и ByteForth.
(Ссылки на эти интерпретаторы, а также этот вопрос StackOverflow включены в " Embedded Systems" wikibook).
Быстрое исполнение во внутреннем дворе может быть реализовано в очень маленькой памяти. Я знаю кого-то, кто сделал его на Cosmac в 1970-х годах. Ядро было всего 30 байт.
Я бы порекомендовал LUA (или eLUA http://www.eluaproject.net/). Я "портировал" LUA на Cortex-M3 некоторое время назад. С вершины моей головы он имел размер вспышки 60 ~ 100 КБ и потребовался около 20 КБ RAM для запуска. Я делал разборку до нужных вещей, но в зависимости от вашего приложения этого могло быть достаточно. Там еще есть место для оптимизации, особенно в отношении требований к ОЗУ, но я сомневаюсь, что вы можете запустить его в 8KB.
Некоторые интерпретаторы AVR/VM:
Wren соответствует вашим критериям - по умолчанию он настроен на использование всего 4 тыс. оперативной памяти. AFAIK он не видел реального использования, так как парень, которого я написал, решил, что ему не нужен переводчик, полностью работающий в целевой системе.
Язык, на который, очевидно, оказывает влияние ML и Forth.
Рассматривали ли вы порт в C Tiny Basic? Или, возможно, переписать p-машину UCSD Pascal в вашу архитектуру от Z-80?
Серьезно, однако, JavaScript создавал бы хороший язык встроенных скриптов, но я не знаю, какие минимальные требования к памяти для VM + GC, а также как сложно удалить зависимости ОС. Я играл с NJS некоторое время назад, что, возможно, соответствовало вашим потребностям. Это интересно в том, что компилятор написан на JavaScript (самостоятельный хостинг).
Вы можете взглянуть на очень мощный AvrCo Multitasking Pascal для AVR. Вы можете попробовать его на http://www.e-lab.de. Версия MEGA8/88 бесплатна. Есть тонны драйверов и симуляторов с отладчиком JTAG и приятные живые или симулированные визуализации всех стандартных устройств (LCDCHAR, LCDGRAPH, 7SEG, 14SEG, LEDDOT, KEYBOARD, RC5, SERVO, STEPPER...).
Вам не хватает EmbedVM, домашняя страница здесь, svn repo здесь. Не забудьте проверить как [1, 2] видео на на первой странице;)
На главной странице:
EmbedVM - небольшая встраиваемая виртуальная машина для микроконтроллеров с C-подобным языковым интерфейсом. Он был протестирован с GCC и AVR микроконтроллеры. Но поскольку виртуальная машина довольно проста, должно быть легко переносить его на другие архитектуры.
VM имитирует 16-битный процессор, который может получить доступ к 64 КБ памяти. Это может работать только на 16-битных значениях и массивах 16-битных и 8-битных значений. Нет поддержки сложных структур данных (структура, объекты, и т.д.). Функция может иметь не более 32 локальных переменных и 32 Аргументы.
Помимо памяти для виртуальной машины, небольшая структура, содержащая состояние виртуальной машины и разумный объем памяти, который необходимы функции EmbedVM на стек нет дополнительных требований к памяти для виртуальной машины. В частности, VM не зависит от управления dymaic памятью.
EmbedVM оптимизирован для размера и простоты, а не для скорости выполнения. Сама VM занимает около 3 КБ программной памяти на AVR микроконтроллер. На AVR ATmega168, работающем на частоте 16 МГц, VM может выполнить около 75 инструкций VM за миллисекунду.
Все обращения к памяти, выполняемые виртуальной машиной, обрабатываются с помощью обратного вызова пользователя функции. Таким образом, возможно наличие некоторой или всей памяти VM внешние запоминающие устройства, флэш-память и т.д. или аппаратное обеспечение "памяти-карты" функций для виртуальной машины.
Компилятор - это инструмент командной строки UNIX/Linux, который читает в *.evm файл и генерирует байт-код в различных форматах (двоичный файл, intel hex, C инициализаторы массива и специальный формат вывода отладки). Это также генерирует файл символов, который может использоваться для доступа к данным в виртуальной машине памяти из хост-приложения.
C-подобный язык выглядит следующим образом: http://svn.clifford.at/embedvm/trunk/examples/numberquizz/vmcode.evm
Я бы порекомендовал MY-BASIC, работает с минимальной ОЗУ 8 КБ и легко переносится.
Рассматривались ли вы просто с помощью /bin/sh
, предоставленного busybox? Или на меньших языках сценариев они рекомендуют?
Я использовал в своей предыдущей работе busybox на BlackFin.
мы скомпилировали perl + php для него, после смены s/fork/vfork/g он работал довольно хорошо... более или менее. Не имея MMU, это не очень хорошая идея. Фрагментация памяти будет довольно легко убивать сервер. Все, что я сделал, это:
for i in `seq 1 100`; do wget http://black-fin-ip/test.php; done
Он умер, когда я шел к моему боссу и сказал ему, что сервер умрет в производстве:)
Prolog - http://www.gprolog.org/
В соответствии с поиском google "proog small" размер исполняемого файла может быть довольно малым, избегая связывания встроенных предикатов.
Также есть JavaScript, через Espruino.
Это специально предназначено для микроконтроллеров, и существуют сборки для различных различных чипов (в основном STM32), которые соответствуют полной системе всего в 8 КБ ОЗУ.
Erlang - http://erlang.org/
он может поместиться в 2 МБ
http://www.experts123.com/q/is-erlang-small-enough-for-embedded-systems.html