Русский
Русский
English
Статистика
Реклама

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



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.

Проекты uLisp



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


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


Беджик Lisp




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


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


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

Требования


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

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

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

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


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

AVR-версия

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

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

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

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

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

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


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

ARM

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

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

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

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

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

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

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

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

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

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

Версия ESP8266/ESP32

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

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

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

Версия RISC-V

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

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

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


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

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

Версия STM32

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

Версия MSP430

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

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

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

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

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

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


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

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


В целом, этот язык является подмножеством 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 (см.Производительность).

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

Пример


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

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

Допустим, вы подключили красный 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)

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

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



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

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

Источник: habr.com
К списку статей
Опубликовано: 07.05.2021 10:12:10
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании маклауд

Lisp

Программирование микроконтроллеров

Лайфхаки для гиков

Микроконтроллеры

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru