Товары из Китая

Forth на STM32F103C8T6 — настоящие динозавры не вымирают


Forth на STM32F103C8T6 — настоящие динозавры не вымирают

Довольно-таки бесполезная для большинства читателей статья об очень старом языке программирования, созданном Чарльзом X. Муром в конце 1960-х — начале 1970-х и используемом до сих пор. И немного поиграем с Форт на STM32.

«The mistery of Yoda’s speech uncovered is:

Just an old Forth programmer Yoda was»

Йоды магистра тайна речи раскрыта:

Старым Форта программистом он просто был.

Forth на STM32F103C8T6 — настоящие динозавры не вымирают

В конце 80-х годов мне в руки попала замечательная книжка Баранова С.Н. и Ноздрунова Н.Р. «Язык Форт и его реализации».

Forth на STM32F103C8T6 — настоящие динозавры не вымирают

В то время мы в институте железнодорожного транспорта разрабатывали портативный тестер для БУВИПа (Блок управления выпрямительно-инверторным преобразователем) для электровозов ВЛ-80Р/ВЛ-85. По нынешним временам не особо портативный — весил килограмм 10. В основном за счет щелочных аккумуляторных батарей, которые были распространены на железной дороге, но легкими не были ни разу.

Forth на STM32F103C8T6 — настоящие динозавры не вымирают

Была под руками ДВК-2М и был кросс-ассемблер для i8080. Программное обеспечение писали на ассемблере, компилятора С не было и взять было неоткуда. Как известно, в то время коммунисты запрещали интернет и даже сотовые телефоны :). Из клонов IBM в то время в нашем вычислительном центре была только ЕС-1022.

Книжка вдохновила настолько, что я написал свою целевую Форт кросс-систему. В итоге весь еще недописанный ассемблерный код был выкинут и переписан на Форте в рекордные сроки. Хорошего редактора для Форта не было, за несколько дней был написан Форт-ориентированный редактор для ДВК, у которого был даже экзотический в то время буфер копирования/вставки строк. Код занял чуть больше 3 килобайт.

Сам Форт занял в памяти контроллера на базе 8080 что-то в районе 8-9 килобайт без всяких оптимизаций (если не нужна интерпретация и выбросить заголовки слов, то система уталкивалась менее, чем в килобайт), а вся задача, включая интерпретатор Форт — около 14 килобайт, включая графический интерфейс на газоразрядном дисплее ГИП-1000 (100х100 точек).

Forth на STM32F103C8T6 — настоящие динозавры не вымирают

В депо слесарям наш тестер очень не понравился.

Сначала они было вдохновились и повели нас на свежеотремонтированный электровоз. За минуту после подключения выяснилось, что ремонт, мягко говоря, некачественный. У БУВИП часть модулей резервируется, и электровоз будет ехать даже с неисправностями. Тут же выяснилось, что какой-то из резервированных модулей был дохлым после ремонта. Ну кому же такой тестер понравится?

После был еще один проект на Форте — управление подсыпкой глинозема в электролизную ванну на алюминиевом заводе. Там контроллер был на базе i8085 — не велика разница. Контроллеров было что-то в районе десятка, доступ к ним был уже организован по-взрослому — был в интранете свой сервер и удаленный доступ к контроллерам. Можно было модифицировать программное обеспечение и получать данные не бегая в цех. По тем временам было круто — об интернете уже были наслышаны, но не более того. Обходились Фидо.

Forth на STM32F103C8T6 — настоящие динозавры не вымирают

Сканы со старых фотографий, если вы решите, что они сделаны в аду — не сильно ошибетесь. Дым из электролизера — это какие-то фториды, дождь над заводом шел слегка разбавленный плавиковой кислотой. В итоге все окна слегка растворялись этой кислотой и через несколько недель новое прозрачное стекло становилось матовым. Впрочем, фотографии больше 25 лет, все сильно изменилось.

Forth на STM32F103C8T6 — настоящие динозавры не вымирают

Через пару десятков лет, когда все было давно и прочно забыто, Форт вылез снова.

Я работал в печальной памяти National Semiconductor, когда в одну микросхему кому-то пришло в голову встроить стековую машину — по сути дела очень усеченную Форт-машину. Готовой кросс-системы не было, но что-то мне удалось адаптировать за считанные дни, в основном время ушло на то, чтобы вспомнить, что есть Форт. Все свелось к небольшой модификации встроенного ассемблера.

Идею очень компактного стекового процессора для FPGA или ASIC со всеми исходниками вы можете найти здесь.

Теперь вы знаете, как сделать свой форт-процессор 🙂

Разных реализаций Форт-систем существует, как собак нерезаных. В большинстве своем они бесплатны.

Форт — довольно странный язык для тех, кто уже занимался программированием.

В нем, как в Библии — в начале было слово. В конце, впрочем, тоже. Все объекты в Форте — это слова. Постоянные, переменные, функции — это всего лишь слова. Еще у него есть два стека — стек данных и стек возвратов. Все делается через задний проход стек данных. Это определяет и способ записи операций — обратная польская запись.

Программирование на Форте — это просто расширение словаря добавлением новых слов.

Форт, как современный Python — не компилирующий язык, а интерпретирующий.

Чтобы умножить 2 на 2 и распечатать результат, нужно положить на стек оба операнда и вызвать функцию умножения и распечатки.

Выглядит это так:

2 2 * .

в итоге получите (удивительное дело, правда?):

4 ok.

Можно оформить это вычисление, как функцию:

: myfunc 2 2 * . ;

Теперь, чтобы получить результат, нужно просто вызвать функцию:

myfunc

4 ok.

Теперь ближе к телу. Для примера можно взять реализацию Mecrisp Forth отсюда.

Файл, скачиваемый по умолчанию, содержит реализацию Форта для десятка разных контроллеров MSP430 от Texas Instruments.

Скачивайте файл mecrisp-stellaris-#.#.#.tar.gz

# я заменил номер версии. В файле Mecrisp-stellaris реализации для Cortex — в районе сотни разных процессоров от разных фирм. Есть тонкость — USB этот Форт не поддерживает, только UART. Если связываться с переходниками лень, как мне, здесь добрый человек уже добавил USB для STM32F103C8T6.

Загрузите файл usb-common.bin. С usb-common.hex какой-то косяк с адресами, разбираться поленился.

Для загрузки используем дешевый клон ST-LINK.

Forth на STM32F103C8T6 — настоящие динозавры не вымирают

Можно с сайта STMicroelectronics скачать, но он только для Windows. Мультиплатформенный Open source ST-Link tools можно скачать тут.

Больше почитать на великом могучем можно тут.

Теперь очищаем флеш память микроконтроллера на всякий случай

st-flash erase

и заливаем паршивку

st-flash write usb-common.bin 0x08000000

После сброса появляется USB Virtual COM Port:

lsusb

Bus 001 Device 050: ID 0483:5740 STMicroelectronics Virtual COM Port

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

Краткий словарь для этой реализации Форта можно найти здесь.

Словарь Форта содержит слов 300 минимум. И исходный текст Форта, написанный на этом Форте — это лучшие примеры и лучшая документация.

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

Для доступа к портам используются слова, не входящий в основной словарь Форта — но что делать, не мы такие — жизнь такая.

: blink omode-pp pc13 io-mode! begin pc13 iox! 500 ms key? until ;

blink

Forth на STM32F103C8T6 — настоящие динозавры не вымирают

Светодиодик будет менять свое состояния каждые полсекунды до тех пор, пока не будет нажата какая-нибудь клавиша.

Разберем, что тут понаписано



: начало определения
blink имя нового слова
omode-pp pc13 io-mode! инициализируем порт pc13 на вывод
begin начало цикла
pc13 iox! исключающее или порта pc13
500 ms задержка 500 мсек
key? нажата ли клавиша?
until продолжать цикл пока клавиша не нажата
; конец определения

Дублировать многочисленные книги и статьи я воздержусь, рассматривайте эту статейку как удочку, а не рыбу. Материалов по Форту очень много, он широко популярен в узких кругах 🙂

И, говорят, плох тот Форт-программист, кто не написал свой Форт. Это близко к истине, свою Форт систему написать легко, если понял, как она устроена. А устроена она не просто, а очень просто :). Особенно для того, кто до этого писал на ассемблере.

Обзор опубликован не в качестве документации или рекламы, а исключительно на правах мемуаров 🙂


СМОТРИ ТАКЖЕ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *