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

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

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

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

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

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

Ответ 1

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

http://wiki.tcl.tk/1363

Ответ 2

Я слышал, что 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).

Ответ 3

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

Ответ 4

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

Ответ 5

Некоторые интерпретаторы AVR/VM:

Ответ 6

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

Язык, на который, очевидно, оказывает влияние ML и Forth.

Ответ 7

Рассматривали ли вы порт в C Tiny Basic? Или, возможно, переписать p-машину UCSD Pascal в вашу архитектуру от Z-80?

Серьезно, однако, JavaScript создавал бы хороший язык встроенных скриптов, но я не знаю, какие минимальные требования к памяти для VM + GC, а также как сложно удалить зависимости ОС. Я играл с NJS некоторое время назад, что, возможно, соответствовало вашим потребностям. Это интересно в том, что компилятор написан на JavaScript (самостоятельный хостинг).

Ответ 8

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

Ответ 9

Вам не хватает 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

Ответ 10

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

Ответ 12

Я использовал в своей предыдущей работе busybox на BlackFin.

мы скомпилировали perl + php для него, после смены s/fork/vfork/g он работал довольно хорошо... более или менее. Не имея MMU, это не очень хорошая идея. Фрагментация памяти будет довольно легко убивать сервер. Все, что я сделал, это:

for i in `seq 1 100`; do wget http://black-fin-ip/test.php; done

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

Ответ 13

Prolog - http://www.gprolog.org/

В соответствии с поиском google "proog small" размер исполняемого файла может быть довольно малым, избегая связывания встроенных предикатов.

Ответ 14

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

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