You are here
Forth на msp430g2553
Вдохновленный Каллисто и освежая память о том, что такое Форт и с чем его едят, набрёл на это.
The TI LaunchPad with 4E4th on it. 16K FLASH - 8K Forth and 8K for your own apps. You only need TI's G2 LaunchPad with the MSP430G2553,
download our 4E4th-IDE, prepare the LaunchPad connection, plug in the USB, flash the LaunchPad, and there we go!
Посколько под рукой валялся msp430 launchpad, решил сразу попробовать (далее всё из-под Ubuntu Linux):
1. Прошиваем лаунчпад (4E4th is based on MSP430 CamelForth version 0.3 written by B. J. Rodriguez for the MSP430F1611Tini430 board. Link):
mspdebug rf2500 "prog 4e4th.a43"
2. Запускаем терминал:
screen /dev/ttyACM0
3. Кнопка RESET на лаунчпаде, Форт выдает строку в терминал:
4E4th R0.34 Apr 28 2012|110001110 Cold
4. Выключаем зеленый и красный светодиоды:
red cclr ok green cclr ok
5. Пишем программы вычисления квадрата и суммы квадратов:
: SQUARED DUP * ; ok : SUM-OF-SQUARES SQUARED SWAP SQUARED + ; ok
6. Проверяем работу:
3 SQUARED . 9 ok 3 4 SUM-OF-SQUARES . 25 ok
7. Напишем программу мигания светодиодами лаучнпада и запустим ее:
DECIMAL ok : blink BEGIN red cset green cclr 100 MS red cclr green cset 100 MS KEY? UNTIL ; ok blink ok
8. Запишем программу во флэш-память микроконтроллера, чтобы при включении или после сброса программа запускалась:
' blink APP ! SAVE
9. Вкусностей там очень много: запись и чтение портов "железа", битовые операции и т.п. PDF-ка с полным глоссарием слов здесь.
---------------------------------------------
Ценители труЪ олдскула оценят возможность заливки исходников (чтобы не набивать программу руками) из-под терминальных программ.
Проект опенсорсный.
Форт - мощная штука, если уметь ей пользоваться. 8 Кбайт места для программы на Форте это серьезно. Таким образом, эта 5-долларовая платка может стать полноценными "мозгами" для роботоприложений. Если приделать беспроводной удлиннитель СОМ-порта, то можно удаленно программировать робота.
На тесте "Счастливые билеты" этот микро-Форт показал замечательные результаты для 6-значных билетов: 29 секунд! Для сравнения там таблица с результатами для современных программируемых калькуляторов (от 5 минут до полутора суток). Конечно, это таки целочисленный Форт, написанный на Асме и работающий на 8 мегагерцах 16-битного RISC процессора, но, тем не менее. Для многих приложений целочисленности достаточно.
- Vitasam's blog
- Log in or register to post comments
- 33755 reads
Comments
Билеты
«Билеты» будут просто летать в целочисленном-то Форте на машинном коде.
Кстати, в 4E4th хорошо работает .S — вершина стека находится справа. У меня всё не доходят руки написать такую же .S для Каллисто.
Если кто будет писать «Билеты» для Каллисто, там цикл FOR NEXT вместо DO LOOP
В ядре уже имеются слова I J для счётчиков двух вложенных циклов, но K L M N придётся определять самим. Значения счётчиков находятся в стеке возвратов, на разной глубине.
UPDATE. На Каллисто 0.7.1б слово .S работает также, вершина стека справа.
Билеты
[quote=AtH]«Билеты» будут просто летать в целочисленном-то Форте на машинном коде.[/quote]
Да, 40 сек (msp430g2553 at 8MHz) vs. 92 минуты в мк161. Быстрее в 138 раз
Приоритеты
Поэтому имеет смысл раскрыть обращение W77LE516P к индикатору и ускорить появление Каллисто в машинном коде. Там только последний шаг или два остался, по переводу кода с AVR на 8052.
Мой приоритет этой весной — работа над Каллисто 1.0, чтобы у владельцев ЭКВМ был надёжный ЯВУ на время написания встроенной версии. Да и работающий прототип языка важен, когда мы займёмся деталями машинной реализации.
Встроенная Каллисто не будет быстрее в 138 раз. Во-первых, разрядность другая. Во-вторых, мы всё же калькулятор делаем, с достойной математикой на плавучке. А не самого быстрого в мире жонглёра целыми числами. :-)
Плавучка с хорошей точностью всегда будет съедать быстродействие. Но ведь наша цель не впечатлять умы количеством инструкций в секунду, а повысить быстродействие расширяемого входного языка (того самого, где «бесконечный» стек, имена переменных, структурные IF и прочие учтённые мною пожелания владельцев) с «удовлетворительно» до «отлично».
Будет такая же скорость, как на МК-161 — уже хорошо.
red green
Вот такую же систему red green хотелось бы разработать для «Электроники МК-161».
В языке МК команды рисования это больше надстройка над железкой индикатора. По хорошему команды рисования должны идти от того, как удобно рисовать человеку.
Создатель Форта в colorForth немного приблизился к идеалу, который хотелось бы видеть на Каллисто. Вот это красивое определение из colorForth мне запомнилось (блок №30 отсюда):
: logo
show black screen
800 710 blue box
600 50 at 1024 620 red box
200 100 at 700 500 green box
text cf keyboard ;
Как в 4e4th Форте почистить стек?
Как в 4e4th Форте почистить стек?
в GForth для этого есть CLEARSTACK, а тут что-то не нашел
http://www.forth-ev.de/repos/4e4th/Release0.34/Doc/Glossary_functional.pdf
Очистка стека данных
На Каллисто стек очищает команда !SP
В некоторых Фортах эта команда называется SP!
В диалоговом режиме достаточно набрать любое слово, которого нет в словаре. Форт выдаст сообщение об ошибке, а стек очистится.
UPDATE. Посмотрел pdf'ку. В этом Форте sp! инициализирует SP числом с вершины стека. Это число берётся из s0 — но означает s0 переменную, где хранится дно стека (как в Каллисто) или адрес этого дна, тут уже надо смотреть самим. Итого один из двух вариантов:
Стек
Я так понял, что работает первый вариант:
4E4th R0.34 Apr 28 2012|110001110 Cold
: !sp s0 sp! ; ok
1 2 3 4 5 ok
.S <5> 1 2 3 4 5 ok
!sp ok
.S <0> ok
6 вложенных циклов
А еще вопрос - как организовать 6 вложенных циклов?
10 0 DO i n1
10 0 DO i n2
...
10 0 DO i n6
LOOP
LOOP
...
LOOP
Так ?
Вложенные циклы в Форте
Примерно так.
Можно использовать промежуточные переменные n1 n2… n6. Но ни в одной из программ, с которыми сравниваем, такого нет.
Поэтому лучше посмотреть на определения слов I и J (если исходники открыты) и дать такие же определения для слов K L M N, после чего в главном слове решения использовать I J K L M N для доступа к счётчикам всех 6 вложенных циклов.
Я сейчас как раз займусь разработкой слова K для Каллисто, на основе I и J :-)
32-битная переменная в 4E4th
А как организовать 32-битную переменную в 4E4th ?
32-битная переменная в 4E4th
Что-нибудь вроде этого разве не подходит:
A more sophisticated Forth on MSP430 LaunchPad
Похоже, что идея выжать всё из дешёвой платки с RISC-процессором будоражит умы. Вот голландцы подтянулись:
Ссылка на launchpad nForth docs.
APP
Слово APP понравилось. Спасибо за него!
Уже думаю о переименовании AUTOEXEC в Каллисто. Слово APP в разы короче и сейчас широко известно в России. Количество народа, знающих по MS-DOS'у слово AUTOEXEC, только уменьшается.
Forth
Кстати Amforth для Atmega-328p более демократичен, достаточно купить Ардуино Уно или её эквивалент.
Да, при 4.5 евро с бесплатной
Да, при 4.5 евро с бесплатной доставкой за аналог Уно демократичней платформу, наверное, сложно найти
Ардуино
На Ардуино даже контроллеры ЧПУ делают, интерпретатор g-кодов прямо в прошивке, есть круговая интерполяция, правда только по двум осям.
Сайт
И порог вхождения в Ардуины
И порог вхождения в Ардуины очень низок - замигать светодиодом, послать строку в СОМ-порт
Немного настольгии по PDP-11 и её ассемблеру
и тоже купил только сейчас этот отладочный "набор" (всё же и второй 8Кб контроллер в комплекте с часовым кварцем и USB шнурком) :)
Залил и 4e4th Форт и также проверил работу VFX Lite MSP430G2553 Форт системы от MPE. Полёт нормальный.
Осталось поподцеплять разные периферийные модули к данной плате и нивелировать ограничения Lite версии VFX или ещё запустить на неё и Mecrisp Форт (MSP430 вариант).
P.S. Счастливые билеты ещё не проверял на VFX системе.
По 4e4th были и 3-и статьи в сообществе easyelectronuics (2012г)
http://we.easyelectronics.ru/msp430/virtualnaya-mashina-i-skriptovoy-dvi...