- PVSM.RU - https://www.pvsm.ru -

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

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

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

Новость!

ARM версия 3.6b теперь поддерживает save-image (сохранение образа) на всех платах ATSAMD21 

В последнем релизе ARM uLisp, версия 3.6b, можно сохранять образ всего вашего рабочего пространства Lisp во флэш-память плат ATSAMD21, на которых не предоставляется отдельный чип DataFlash.

Таким образом, поддержка save-image добавляется к Adafruit Neo Trinkey, Adafruit Gemma M0, Adafruit Feather M0, Arduino Zero, Arduino MKRZero и Seeedstudio Xiao M0.

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

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

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

Актуальную версию uLisp можно бесплатно скачать со страницы Download uLisp [1].

Проекты uLisp 

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

Управление NeoPixels на ассемблере

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

Трассировка лучей при помощи uLisp

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

Беджик Lisp 

 

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

Матричные часы 

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

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

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

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

Требования

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

Память для хранения программ: не менее 32 кбайт.

ЭCППЗУ, флеш или cегнетоэлектрическая оперативная память (FRAM): при наличии используется для сохранения и загрузки рабочего пространства uLisp.

8/16-битные платформы

Версии uLisp для 8-битных и 16-битных платформ поддерживают целые числа в диапазоне от -32768 до 32767.

AVR-версия 

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

Arduino Uno [2] или другие карты на основе ATmega328. На ней достаточно памяти для простого приложения на uLisp с использованием коротких символьных имен. Все Простые примеры пойдут на Arduino Uno.

Arduino Mega 2560 [3] или другие платы на основе ATmega2560. С ними у вас будет достаточно памяти для весьма сложного приложения; см., например, Animals [4]Tweetmaze [5]Route finder [6] и Infinite precision arithmetic [7].

ATmega1284 [8]. Хотя, в Arduino нет официальной платы на этой основе, ATmega1284 легко подключить к макетной плате, причем, здесь предоставляется целых 16 кбайт ОЗУ.

Платы ATmega4809 [9]. Arduino Nano Every и отладочная плата Microchip Curiosity Nano – бюджетные платофрмы на основе ATmega4809.

32/64-битные платформы

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

ARM 

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

Arduino Zero [10]. Эта плата основана на ядре SAMD21 ARM Cortex-M0+ и предоставляет 256 кбайт флеш-памяти и 32 кбайт ОЗУ.

Arduino MKRZero [11]. Похожа на Arduino Zero, основана на ядре SAMD21 ARM Cortex-M0+ и предоставляет 256 кбайт флеш-памяти и 32 кбайт ОЗУ. В ней имеется гнездо для SD-карты, поэтому SD-карту можно использовать для сохранения и загрузки образов uLisp.

Платы Adafruit M0 [12]. Платы Adafruit Gemma M0, Adafruit ItsyBitsy M0 и Adafruit Feather M0 все основаны на микроконтроллере ATSAMD21 48 MГц ARM Cortex M0+. У них схожие возможности и производительность; основные отличия между этими платами заключаются в их коэффициенте формы. 

Платы Adafruit M4 [13]. Платы Adafruit Metro M4 Grand Central, Adafruit Metro M4, Adafruit ItsyBitsy M4, и Adafruit Feather M4 все основаны на микроконтроллере ATSAMD51 120 MГц ARM Cortex M4.

Adafruit PyGamer и PyBadge [14]. Adafruit PyGamer и PyBadge – это портативные игровые платформы на основе микроконтроллера ATSAMD51 120 MГц ARM Cortex M4, оснащенные цветным тонкопленочным дисплеем размером 160x128.

Платы Adafruit nRF52840 [15]. Adafruit CLUE и Adafruit ItsyBitsy nRF52840 обе основаны на микроконтроллере Nordic Semiconductor nRF52840 64 MГц ARM Cortex-M4, с 1 Mбайт флеш-памяти для хранения программ и 256 Кбайт ОЗУ.

BBC Micro:bit [16]Эта плата основана на микроконтроллере Nordic Semiconductor nRF51822 ARM Cortex-M0. Она работает на частоте 16 MГц и предоставляет 256 Кбайт флеш-памяти для программ и 16 Кбайт ОЗУ.

Maxim MAX32620FTHR [17]Эта плата основана на микроконтроллере Maxim MAX32620 ARM Cortex-M4F, работающем на частоте 96 MГц, с 2048 Кбайт флеш-памяти и 256 Кбайт ОЗУ.

Teensy 4.0 и 4.1 [18]. Они основаны на процессоре NXP iMXRT1062 ARM M7, работающем на частоте 600 MГц с 1 Мбайт ОЗУ.

Версия ESP8266/ESP32 

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

Платы ESP8266 [19]. Эти платы основаны на 32-битном микропроцессоре Tensilica Xtensa L106, работающем на частоте 80 MГц, с 4 Мбайт флеш-памяти и 80 Кбайт ОЗУ. В них встроена функция Wi-Fi.

Платы ESP32 [20]. Эти платы основаны на 32-битном микропроцессоре Tensilica Xtensa LX6, работающем на частоте 160 или 240 MГц, с 4 Мбайт флеш-памяти и 80 Кбайт ОЗУ. В них встроена функция Wi-Fi и двухрежимный Bluetooth.

Версия RISC-V 

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

Платы Sipeed MAiX RISC-V [21]. Эти платы основаны на двухъядерном 64-битном процессоре Kendryte K210 RISC-V, 400 МГц, предоставляют 8 Мбайт ОЗУ и 16 Мбайт флеш-памяти. Они схожи по производительности. 

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

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

Arduino Due [22]. Эта плата основана на ядре AT91SAM3X8E ARM Cortex-M3 и предоставляет 512 Кбайт флеш-памяти, 96 Кбайт ОЗУ и часы 84 МГц.

Версия STM32 

Платы STM32 [23]. Платы STM32 Maple Mini и Blue Pill основаны на процессоре STM32F103 ARM Cortex-M3, работающем на частоте 72 МГц, с 128 Кбайт флеш-памяти и 20 Кбайт ОЗУ.

Версия MSP430 

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

MSP430 F5529 LaunchPad [24]. Она использует флеш-память для сохранения образов и предоставляет достаточно памяти для весьма сложного приложения.

MSP430 FR5969 LaunchPad [25]. Эта версия использует cегнетоэлектрическую оперативную память (FRAM) для рабочего пространства и для сохранения образов, благодаря чему памяти у вас в распоряжении будет предостаточно.

MSP430 FR5994 LaunchPad [26]. Эта версия использует cегнетоэлектрическую оперативную память (FRAM) для рабочего пространства и для сохранения образов, благодаря чему памяти у вас в распоряжении будет предостаточно.

MSP430 FR6989 LaunchPad [27]. Эта версия использует cегнетоэлектрическую оперативную память (FRAM) для рабочего пространства и для сохранения образов, а также поддерживает вывод текста на встроенный ЖКИ-дисплей.

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

См. Производительность [28].

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

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

На 8/16-битных платформах предоставляются списки, символьные последовательности, целые числа, символы, строки (на 32-битных платформах) и потоки.

Кроме того, на 32-битных платформах предоставляются числа с плавающей точкой и массивы, в том числе, битовые массивы.

Целое число – это последовательность цифр, которой может предшествовать знак «+» или «-». На 8/16-битных платформах целые числа могут быть в диапазоне от -32768 до 32767. На 32-битных платформах целые числа могут быть в диапазоне от 2147483647 до -2147483648. Целые числа можно вводить в шестнадцатеричной, восьмеричной или двоичной системе, при помощи нотаций #x2A, #o52, или #b101010, все эти варианты равны 42.

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

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

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

В uLisp есть сборщик мусора, работающий с применением алгоритма пометок (mark and sweep). Сборка мусора занимает менее 1 мсек на Arduino Uno или менее 3 мсек на Arduino Mega 2560 (см. Производительность [28]).

uLisp также содержит простой редактор программ (см. Работа с редактором программ [29]), средство трассировки и приятный принтер (см. Отладка в uLisp [30]).

Пример

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

Загрузив uLisp себе на микроконтроллерную плату, с ним можно наладить коммуникацию, вводя или вставляя команды в монитор порта или воспользовавшись последовательным терминалом. Подробнее см. Использование uLisp [31].

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

(analogwrite 9 128)

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

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

(defun red (x) (analogwrite 9 x))

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

(red 128)

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

Допустим, вы используете потенциометр, который подключили к плате, чтобы варьировать напряжение на аналоговом входе A0. Можно определить функцию dim, чтобы потенциометр сам корректировал яркость LED, вот так:

(defun dim () (loop (red (/ (analogread 0) 4)))

и запустить, написав:

(dim)

Наконец, можно сохранить образ uLisp в ЭСППЗУ и указать, что dim должна выполняться при загрузке, введя:

(save-image 'dim)

После перезапуска Arduino dim будет загружаться и выполняться автоматически.

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


Облачные серверы от Маклауд [32] быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Автор: owlofmacloud

Источник [33]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/news/364004

Ссылки в тексте:

[1] Download uLisp: http://www.ulisp.com/show?1AA0

[2] Arduino Uno: http://www.ulisp.com/show?1LG8

[3] Arduino Mega 2560: http://www.ulisp.com/show?1LGA

[4] Animals: http://www.ulisp.com/show?1LKX

[5] Tweetmaze: http://www.ulisp.com/show?1ANR

[6] Route finder: http://www.ulisp.com/show?1BM4

[7] Infinite precision arithmetic: http://www.ulisp.com/show?1FHA

[8] ATmega1284: http://www.ulisp.com/show?1LGC

[9] ATmega4809: http://www.ulisp.com/show?33LO

[10] Arduino Zero: http://www.ulisp.com/show?29RK

[11] Arduino MKRZero: http://www.ulisp.com/show?29RM

[12] Adafruit M0: http://www.ulisp.com/show?2OFG

[13] Adafruit M4: http://www.ulisp.com/show?2OH5

[14] Adafruit PyGamer и PyBadge: http://www.ulisp.com/show?33OF

[15] Adafruit nRF52840: http://www.ulisp.com/show?2ZD1

[16] BBC Micro:bit: http://www.ulisp.com/show?3CXJ

[17] Maxim MAX32620FTHR: http://www.ulisp.com/show?2IN9

[18] Teensy 4.0 и 4.1: http://www.ulisp.com/show?36VJ

[19] ESP8266 : http://www.ulisp.com/show?2CF9

[20] ESP32: http://www.ulisp.com/show?2AJI

[21] Sipeed MAiX RISC-V: http://www.ulisp.com/show?30X8

[22] Arduino Due: http://www.ulisp.com/show?1XA0

[23] STM32: http://www.ulisp.com/show?29ST

[24] MSP430 F5529 LaunchPad: http://www.ulisp.com/show?1OCR

[25] MSP430 FR5969 LaunchPad: http://www.ulisp.com/show?1OD4

[26] MSP430 FR5994 LaunchPad: http://www.ulisp.com/show?26HO

[27] MSP430 FR6989 LaunchPad: http://www.ulisp.com/show?2JPG

[28] Производительность: http://www.ulisp.com/show?36M3

[29] Работа с редактором программ: http://www.ulisp.com/show?1J1Z

[30] Отладка в uLisp: http://www.ulisp.com/show?19X5

[31] Использование uLisp: http://www.ulisp.com/show?19XT

[32] Маклауд: https://macloud.ru/?partner=4189mjxpzx

[33] Источник: https://habr.com/ru/post/556228/?utm_source=habrahabr&utm_medium=rss&utm_campaign=556228