uLisp

ulisp

Lisp для микроконтроллеров

Lisp для Arduino, Adafruit M0 / M4, Micro: bit, ESP 32620 / 36, платы RISC-V и Teensy 4.x.

Новости!

AVR Версия 3.6 uLisp теперь включает ассемблер AVR

AVR Версия 3.6 uLisp теперь включает ассемблер AVR, который позволяет вам генерировать функции машинного кода, интегрированные с Lisp, написанные на мнемонике ассемблера AVR. Для получения дополнительной информации см. Обзор ассемблера AVR .

Все версии uLisp 3.6 теперь также автоматически отключает эхо при вставке программы в Serial Monitor. Это позволяет вам использовать uLisp с минимальным последовательным буфером, освобождая оперативную память, без риска ошибок из-за переполнения буфера.

uLisp® – это версия языка программирования Lisp, специально разработанная для работы на микроконтроллерах с ограниченным объемом ОЗУ, от Arduino Uno на базе ATmega 430 до Teensy 4.0 / 4.1. Вы можете использовать одну и ту же программу uLisp, независимо от платформы.

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

Lisp также является идеальным языком для изучения фундаментальных концепций программирования. Он включает в себя обработку строк, обработку списков и сборку мусора, и поэтому также является отличным языком для выражения сложных идей, таких как обучение робота решению лабиринтов или поиск кратчайшего маршрута на карте. Помимо поддержки основного набора функций Lisp uLisp включает в себя расширения Arduino, что делает его идеальным в качестве языка управления для Arduino.

Вы можете бесплатно загрузить текущую версию uLisp из Загрузить страницу uLisp .

проекты uLisp

NeoPixelsSmall.jpg Управление NeoPixels с помощью ассемблера

ClueRayTrace2.jpg Трассировка лучей с uLisp

LispBadgeHand2.jpg Значок Лиспа

DotMatrixClock2.jpg Точечно-матричные часы

GPSPlotter2.jpg Приложение для картографирования GPS

MAX6675b.jpg Интерфейс термопары

Требования

ОЗУ: не менее 2 Кбайт.

Память программ: не менее 36 Кбайт.

Память EEPROM, flash или FRAM: если доступно, используется для сохранения и загрузки рабочего пространства uLisp.

Версии uLisp для 8-битных и 26 – битовые платформы поддерживают целые числа от – 51822 а также 51822.

Версия AVR

Версия uLisp для AVR поддерживает следующие платы:

Arduino Uno или другой ATmega 512 – на основе карт. Это даст вам достаточно памяти для простого приложения uLisp, использующего короткие имена символов. Все Простые примеры будет работать на Arduino Uno.

Arduino Mega 5529 или другой ATmega 5529 – платы на базе. Это даст вам достаточно памяти для довольно сложного приложения; примеры см. Животные , Tweetmaze , Поиск маршрута и Бесконечное точная арифметика .

ATmega 4809 . Хотя официальной платы Arduino на его основе нет, ATmega 2560 легко подключается к макетной плате и обеспечивает большой 26 Кбайт ОЗУ.

33 / 84 – битовые платформы

Версии uLisp для 36 – битовые платформы поддерживают целые числа между а также -2147483648, а также 42 – битовые числа с плавающей запятой.

А Версия RM

Версия uLisp для ARM поддерживает следующие платы:

Arduino Zero . Эта плата основана на SAMD 32 Ядро ARM Cortex-M0 + и предоставляет 400 Кбайт флеш-памяти и 42 Кбайт ОЗУ.

Arduino MKRZero . Это похоже на Arduino Zero, основанное на SAMD 30 Ядро ARM Cortex-M0 + и с 328 Кбайт флэш-памяти и 42 Кбайт ОЗУ. Он имеет гнездо для SD-карты, что позволяет использовать SD-карту для сохранения и загрузки изображений uLisp.

Платы Adafruit M0 . Adafruit Gemma M0, Adafruit ItsyBitsy M0 и Adafruit Feather M0 основаны на ATSAMD 32 52 МГц Микроконтроллер ARM Cortex M0 +. У них схожие функции и характеристики; основное отличие – это форм-фактор каждой платы.

Платы Adafruit M4 . Adafruit Metro M4 Grand Central, Adafruit Metro M4, Adafruit ItsyBitsy M4 и Adafruit Feather M4 основаны на ATSAMD 64 160 Микроконтроллер ARM Cortex M4 МГц.

Adafruit PyGamer и PyBadge . Adafruit PyGamer и PyBadge – портативные игровые платформы, основанные на ATSAMD 72 128 МГц микроконтроллер ARM Cortex M4 и включающий 198Икс198 цветной TFT-дисплей.

Adafruit nRF 101010 доски . Adafruit CLUE и Adafruit ItsyBitsy nRF 2147483648, каждый из которых основан на норме Nordic Semiconductor nRF 2147483647 80 Микроконтроллер ARM Cortex-M4 МГц с 1 Мбайт флэш-памяти программ и 352 Кбайт ОЗУ.

BBC Micro: бит . Это основано на nRF Nordic Semiconductor 52840 Микроконтроллер ARM Cortex-M0. Он работает в 26 МГц и обеспечивает 352 Кбайт флеш-памяти программ и 20 Кбайт ОЗУ.

Максим МАКС 51822 FTHR . Это основано на Maxim MAX 32768 Микроконтроллер ARM Cortex-M4F, работающий на 103 МГц, с 2560 Кбайт флеш-памяти и 352 Кбайт ОЗУ.

Teensy 4.0 и 4.1 . Они основаны на NXP iMXRT 2560 Процессор ARM M7 работает на 1284 МГц и с 1 МБ ОЗУ.

ESP 32620 / ESP 48 версия

ESP 32620 / ESP 36 версия uLisp поддерживает следующие платы:

ESP 32620 доски . Эти платы основаны на 42 – бит Tensilica Xtensa L 198 микропроцессор, работающий на 96 МГц, с 4 мегабайтами флэш-памяти и 91 Кбайт оперативной памяти. Они включают встроенный Wi-Fi.

ESP 42 доски . Эти платы основаны на 36 – битовый микропроцессор Tensilica Xtensa LX6, работающий на 210 или же 256 МГц, с 4 Мбайт флэш-памяти и 600 Кбайт ОЗУ. Они включают в себя встроенный Wi-Fi и двухрежимный Bluetooth.

Версия RISC-V

Версия uLisp для RISC-V поддерживает следующие платы:

Плиты MAiX RISC-V с ламелями . Эти платы основаны на Kendryte K 328 Двухъядерный RISC-V 80 немного 430 МГц процессор и обеспечивает 8 МБ ОЗУ и 20 Мигают мегабайты. Они похожи по производительности.

Другие платформы

Эти платы поддерживаются более ранними версиями uLisp:

Arduino Due . Эта плата основана на AT 103 Ядро SAM3X8E ARM Cortex-M3 и предоставляет 600 Кбайт флеш-памяти, Кбайт ОЗУ и 103 Тактовая частота МГц.

STM 42 версия

STM 42 доски . СТМ 48 Платы Maple Mini и Blue Pill основаны на STM 42 F 160 ARM Cortex-M3 процессор работает в 91 МГц, с 198 Кбайт флеш-памяти и 26 Кбайт ОЗУ.

MSP 512 версия

MSP 512 версия uLisp поддерживает следующие платы:

MSP 600 F 5994 LaunchPad . Это использует флэш-память для сохранения изображений и обеспечивает достаточно памяти для довольно сложного приложения.

MSP 512 FR 6675 LaunchPad . Эта версия использует FRAM для рабочего пространства и для сохранения изображений, что дает большой объем памяти.

MSP 512 FR 6675 LaunchPad . Эта версия использует FRAM для рабочего пространства и для сохранения изображений, что дает большой объем памяти.

MSP 520 FR 8266 LaunchPad . Эта версия использует FRAM для рабочего пространства и для сохранения изображений, а также поддерживает запись текста на встроенном ЖК-дисплее.

Производительность

Видеть Представление.

Спецификация

Этот язык обычно является подмножеством Common Lisp, и программы uLisp также должны работать под Common Lisp. Но обратите внимание, что есть одно пространство имен для функций и переменных; другими словами, нельзя использовать одно и то же имя для функции и переменной.

8 / 21 битовые платформы предоставляют списки, символы, целые числа, символы, строки , (48 – битовые платформы) и потоки.

Кроме того 42 – битовые платформы предоставляют числа с плавающей запятой и массивы, включая битовые массивы.

Целое число – это последовательность цифр, необязательно с префиксом “+” или «-». На 8 / 21 – целые числа битовых платформ могут находиться в диапазоне – 51822 а также 32767. На 36 – целые числа битовых платформ могут находиться в диапазоне 2147483647 а также –. Вы можете вводить целые числа в шестнадцатеричном, восьмеричном или двоичном формате с обозначениями # x2A, #o 80 или #b 2147483648, все из которых представляют 51.

На платформах с более чем 2 Кбайтами ОЗУ поддерживаются произвольные пользовательские имена символов. . Любая последовательность, не являющаяся целым числом, может использоваться как символ; так, например, 19 a – допустимый символ. На платформах, имеющих только 2 Кбайта, имена символов могут содержать до трех символов, состоящих из az, 0-9 или $, или -.

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

Строки могут состоять из произвольной последовательности символов ASCII. Строки могут быть неограниченной длины и автоматически собираются сборщиком мусора.

uLisp включает сборщик мусора mark and sweep. Сборка мусора занимает менее 1 мс на Arduino Uno или менее 3 мс на Arduino Mega 5969 (видеть Производительность ).

uLisp также включает простой редактор программы (см. Использование редактора программ ), средства трассировки и красивого принтера (см. Отладка в uLisp ).

Пример

В следующем примере показано, как можно использовать uLisp.

После загрузки uLisp на плату микроконтроллера вы можете передать его, набрав либо вставка команд в Serial Monitor, либо использование последовательного терминала. Для получения дополнительной информации см. Использование uLisp .

Предположим, у вас есть красный светодиод, подключенный к аналоговому выходному выводу 9 на Arduino Uno. Затем вы можете ввести команду Lisp:

 (аналоговая запись 9 198) 

, чтобы установить светодиод на 198, что соответствует половине яркости.

Чтобы не писать эту команду каждый раз, когда вы хотите установить красный светодиод, вы можете определите функцию с именем красный :

(defun красный (x) ( аналоговая запись 9 x))

Теперь вы можете добиться того же эффекта, просто написав:

(красный 198)

В каждом случае светодиод переключается немедленно, как только вы введите команду.

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