Каковы доступные интерактивные языки, которые работают в крошечной памяти?

Я ищу языки программирования общего назначения, которые

  • иметь интерактивное (текущее кодирование) приглашение
  • работать в 32 КБ ОЗУ самостоятельно или 8 КБ, когда компилятор размещен на отдельной машине
  • запускается на микроcontrollerе всего за 8-32 КБ оперативной памяти (без MMU).

Ниже приведен мой список, чего мне не хватает?

  • Python : для виртуальной машины PyMite требуется 64- кратная флеш-память, 8 КБ оперативной памяти. Цели LPC, SAM7 и ATmegas с 8K и более. Хостинг.
  • Lua : Часто задаваемые вопросы по eLua рекомендуют 256K flash, 64K RAM.
  • FORTH : для этого требуется 8- кратная вспышка, 150- байтовая ОЗУ, 30 байт EEPROM на ATmega.
  • Схема : схема подмышки Самая маленькая цель – LPC2103 с 32K Flash, 4K SRAM.
  • C : Interactive C работает на 68HC11 без вспышки и 32K SRAM. Хостинг.
  • C : picoc с открытым исходным кодом, кросс-компиляция, интерактивная система C. При компиляции для AVR требуется 63K flash, 8K RAM. ОЗУ можно было бы уменьшить, пытаясь удержать таблицы во флэш-памяти.
  • C ++ : AngelScript с открытым исходным кодом, на основе байт-кода, C / C ++, как язык сценариев, с простыми родными вызовами.
  • Tcl : TinyTCL работает на DOS, 60K двоичном. Легко переносить.
  • BASIC : TinyBasic : Инициализация с кучей размером 64 КБ , может быть настраиваемой.
  • шепелявость
  • PostScript : (Я еще не нашел реализацию FOSS для низкой памяти)
  • Shell : bitlash : интерактивная командная shell для Arduino (ATmega). См. Также AVRSH .

Существует множество версий Tcl для встроенного программирования:

http://wiki.tcl.tk/1363

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

Я слышал, что CHIP-8, XPL0, PicoC и Objective Caml были перенесены в графические калькуляторы. Статья в Википедии «Lego Mindstorms» содержит список языков программирования, которые предположительно работают на платформе Lego RCX или Lego NXT. Кто-нибудь из них отвечает вашим критериям «живого кодирования»?

Возможно, вы захотите проверить другой микроcontroller Forths в Forth wiki. В нем перечисляется как минимум 4 Forths для AVR Atmel: amforth (о котором вы уже упоминаете), PFAVR, avrforth и ByteForth.
(Ссылки на эти интерпретаторы, а также этот вопрос StackOverflow включены в « Встроенные системы » wikibook).

Я бы порекомендовал LUA (или eLUA http://www.eluaproject.net/ ). Я «портировал» LUA на Cortex-M3 некоторое время назад. С вершины моей головы он имел размер вспышки 60 ~ 100 КБ и потребовался около 20 КБ RAM для запуска. Я делал parsingку до нужных вещей, но в зависимости от вашего приложения этого могло быть достаточно. Там еще есть возможности для оптимизации, особенно в отношении требований к ОЗУ, но я сомневаюсь, что вы можете запустить его в 8KB.

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 – небольшая встраиваемая виртуальная машина для микроcontrollerов с интерфейсом языка C-типа. Он был протестирован с помощью микроcontrollerов GCC и AVR. Но поскольку виртуальная машина довольно проста, ее легко переносить на другие архитектуры.

VM имитирует 16-битный процессор, который может получить доступ к памяти до 64 КБ. Он может работать только на 16-битных значениях и массивах 16-битных и 8-битных значений. Поддержка сложных структур данных (структура, объекты и т. Д.) Не поддерживается. Функция может содержать не более 32 локальных переменных и 32 аргумента.

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

EmbedVM оптимизирован для размера и простоты, а не для скорости выполнения. Сама VM занимает около 3 КБ программной памяти на микроcontrollerе AVR. На AVR ATmega168, работающем на частоте 16 МГц, VM может выполнять около 75 инструкций VM за миллисекунду.

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

Компилятор – это средство командной строки UNIX / Linux, которое читается в файле * .evm и генерирует байт-код в различных форматах (двоичный файл, инициализаторы XML hex, C и специальный формат вывода отладки). Он также создает файл символов, который может использоваться для доступа к данным в памяти виртуальной машины из приложения-хозяина.

C-подобный язык выглядит следующим образом: http://svn.clifford.at/embedvm/trunk/examples/numberquizz/vmcode.evm

Я бы порекомендовал MY-BASIC , работает с минимальной оперативной памятью 8 КБ и легко переносится.

Я бы предложил использовать python. Но теперь единственная проблема в правильной памяти? Поэтому у меня есть отличная идея для людей, которые могут застрять в этой проблеме позже.

Прежде всего, напишите bf-интерпретатор (или просто получите исходный код откуда-то). Переводчик будет очень маленьким. Также bf является полным языком Тьюринга. Теперь вам нужно написать свой код в python, а затем перевести его в bf с помощью bfpy ( https://github.com/felko/bfpy/blob/master/README.md ). Я дал вам решение с наименьшими накладными расходами, и я уверен, что переводчик bf будет легко оставаться под 10 КБ использования RAM.

Рассматривали ли вы просто использование /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 

Он умер, когда я шел к моему боссу и сказал ему, что сервер умрет в производстве 🙂

Пролог – http://www.gprolog.org/

Согласно поиску google «prolog малый», размер исполняемого файла может быть довольно малым, избегая связывания встроенных предикатов.

Есть также JavaScript через Espruino .

Это специально сконструировано для микроcontrollerов, и есть сборки для различных различных чипов (в основном STM32), которые вписываются в полную систему всего в 8 КБ оперативной памяти.

Эрланг – http://erlang.org/

он может поместиться в 2 МБ

http://www.experts123.com/q/is-erlang-small-enough-for-embedded-systems.html

Interesting Posts

Как определить, не определена ли строка в сценарии оболочки bash?

Ускорение производительности с типами «как» и «с нулевыми значениями»

Являются ли операторы сдвига (<>) арифметическими или логическими в C?

Qt Stylesheet для пользовательского виджета

java.lang.illegalstateexception не удалось найти метод (представление) в fragmentе андроида classа активности

Как объединить два файла Jar

Ионная ошибка при создании Android при загрузке Gradle

Пакетный выпуск – создание папок и перемещение документов

Как установить траекторию инструмента SGEN в Msbuild для целевой среды 3.5

Когда мне понадобится SecureString в .NET?

3TB жесткие диски SATA в старую систему Linux

Генерация целых чисел в порядке возрастания с использованием набора простых чисел

Понимание сравнения NSString

C # – Получить список файлов, за исключением скрытых

Можно ли вызвать виртуальную функцию базового classа, если я ее переопределяю?

Давайте будем гением компьютера.