You are here
stm32BASIC
сб, 18/01/2020 - 01:56 - Vitasam
Эта платка, валяющаяся без дела, таки "жгла карман" :)
В общем, отряхнул пыль со старого гит-репозитория с stm32BASIC. Не пришлось ничего менять в мэйкфайле и конфигурации - процессор того же семейства:
- STLink и USBtoUART подцеплены проводами
- Заливка бинарника при помощи OpenOCD
- Консоль serial терминала
Исходник
#include <libopencm3/stm32/rcc.h> #include <libopencm3/stm32/gpio.h> #include <libopencm3/stm32/usart.h> const char gimmick[] = " __ ________ __________ ____ ________ __\r\n"\ " _____/ /_____ ___ |__ /__ \\ / ____/ __ \\/ __ \\/_ __/ / / /\r\n"\ " / ___/ __/ __ `__ \\ /_ <__/ // /_ / / / / /_/ / / / / /_/ /\r\n"\ " (__ ) /_/ / / / / /__/ / __// __/ / /_/ / _, _/ / / / __ /\r\n"\ "/____/\\__/_/ /_/ /_/____/____/_/ \\____/_/ |_| /_/ /_/ /_/\r\n"; const char ver[] = "stm32 FORTH, v.0.10"; int main(void) { clock_setup(); usart_setup(); comm_puts(gimmick); comm_puts(ver); xprintf("\r\n"); return 0; }
В общем, даже в такой 7-евровой конфигурации можно начинать портировать что угодно - ввод и вывод на терминал работает
Forums:
ВК-6 на ARM
Си это так себе для Форта. Ассемблер нужен. Желательно чистый, безо всяких прологов и библиотек — они добавляются позже, на уровне исходного кода. Кстати, туда получается ВК-6 засунуть?
Если его немножечко подпилить, добавив несколько регистров функций, то Каллисто под ним запустится. Я не пробовал, но под eMKatic работает.
Вывод, конечно, будет в графическом виде, а не текстовом. И ввод с клавиш, а не входного потока. В идеале, конечно, это надо с клавиатурой и индикатором связать, добавить bcd-библиотеку, файловую систему… зато Каллисто выйдет из новосибирской песочницы.
161eForth умеет работать по RS-232. Но он ещё не готов, да и нет в ВК-6 регистров функций ни для последовательного порта, ни для прерываний. Портировать его смысла нет. В нём нет плавучки, а обычный eForth для ARM существует. Разве что будут интересны мои структуры данных, ускоряющие поиск.
Forth на Cи тоже имеет место быть
и не так редко :)
Forth в проектах на https://github.com/search?utf8=%E2%9C%93&q=forth&type=
Forth в проектах на https://sourceforge.net/directory/?q=Forth
есть и ещё площадки размещения проектов, как https://bitbucket.org/
P.S. Но, конечно, в первую очередь можно смотреть на реализованные Форты с использованием ассемблера.
Для ARM Сortex популярен Mecrisp-Stellaris http://mecrisp.sourceforge.net/
Из одного из последних Форт на Си собирал для Windows BigForth :)
Извращение
Форт на Си — извращение, нивелирующее достоинства Форта. Си нужен разве что для раскрутки Форта, как в Gforth. Достойных сишных Фортов нет, только «смотрите, даже у меня получилось!!1». Писал же совсем недавно об этом.
Это примерно как Каллисто поверх ЯМК. Но я извращаюсь не от хорошей жизни, а от закрытости уровня ассемблера. И получаю бонусом совместимость с архитектурой ЭКВМ, как и где бы её ни реализовали — хоть на айфоне. Плюс примитивы пишутся на языке МК, который понимает больше народу, чем ассемблер.
На ассемблере придётся всего несколько примитивов реализовать! Вот здесь можно найти уже готовый eForth для ARM, там примитивов всего немножко:
http://forth.org/OffeteStore/OffeteStore.html
Требуется уточнение
какие возможности Форта реализованного на Си сильно уменьшают значимость такого Форта? :)
P.S. Например такой реализации Форта http://www.forth.org.ru/news/stm32f105MultiAdapter#0
Накладные расходы
Накладные расходы Си при вызове функций. То самое, о чём говорил Чак Мур на 11 странице:
https://ia800107.us.archive.org/25/items/1murCharlZXIntervYuPoFortYazyku...
К слову, код на картинке, да и по ссылке на репозиторий, мало напоминает Си. Он больше напоминает неумение писать на чистом ассемблере, в условиях хорошо знакомых сишных инструментов. Но часть слов реализована на Си, что работает гирями на ногах.
Я в таких условиях писал форт-ассемблер и генерировал образ прошивки в СПФ, см. черновики Каллисто-2.
STM32eForth720
STM32eForth720 for STM32 F4 Discovery, 2014
This eForth is for STM32F407 chip on STM32 F4 Discovery Kit from STMicroelectronics. This chip has 1 MB flash memory, 192 KB of RAM, and a ton of interesting IO devices. It is no longer an ARM7 chip, but a THUMB2 chip. STMeForth720 is optimized for the new environment.
http://forth.org/OffeteStore/2165_stm32eForth720.zip
Это похоже? Есть ещё
ADuCeForth for Analog Devices ADuC702x, 2005
Based on an Analog Devices’ ADuC7020, which includes a 32-bit ARM7 microcontroller and a host of peripheral devices, including ADC, DAC, 8 KB RAM and 92 KB flash. eForth is downloaded to flash through an UART port. It is an excellent platform using Forth to develop real time industrial applications.
http://forth.org/OffeteStore/2152_ADuCcompiler520.zip
SAM7eF for Atmel AT91SAM7X256, 2008
This eForth system runs on an Olimax development board with a 132x132 color LCD display. AT91SAM7 is an ARM7 microcontroller with 256 KB of flash and 64 KB of RAM, from Atmel. eForth boots from flash and copies itself to RAM and run from it. It is the first microcontroller for eForth that you don’t have to worry about memory.
http://forth.org/OffeteStore/2153_sam7ef.zip
Чипы
Это более мощные чипы, чем тот, что в моем примере.
ВК6, может, влезет
Каллисто: начало
Статьи «Начальная загрузка Каллисто» и «Адресный интерпретатор» могут помочь переносу под ARM. Дальше идут слова, на Вики подробное описание каждого слова — на случай, если с чем-нибудь возникнут сложности.
Вот здесь написал подробней:
https://pmk.arbinada.com/ru/node/1475