Forth
http://www.fforum.winglion.ru/

Очередной AVRForth
http://www.fforum.winglion.ru/viewtopic.php?f=39&t=2797
Страница 1 из 11

Автор:  oco [ Пн янв 16, 2012 04:05 ]
Заголовок сообщения:  Очередной AVRForth

Заинтересовался недавно микроконтроллерами ATMEL.
Захотел найти себе форт под них, основные цели были такими:
1. Минимальный по объему генерируемый код без словарных статей
2. Возможность работы под Linux
3. Простой, без наворотов
4. Желательно, с библиотеками для i2c, lcd и т.д
5. Отладчик не критичен

Смотрел несколько вариантов:
1. AMForth.
Вроде хороший, но много занимает памяти, используется косвенный шитый код - медленно, возможность расширения прямо в контроллере мне не нужна была - отбросил
2. http://krue.net/avrforth/
На gforth для linux, но неудобно после каждого слова ставить "]", опять словарные статьи в коде - отбросил
3. Firmware Studio
Почти то, что нужно. Но библиотек нет, среда неудобная, современные контроллеры нужно самому вносить, под Windows, но работает в Wine. Поигрался и бросил :)
4. http://fpauk.narod.ru/avr4th.1.rar
Это только заготовка для транслятора

И тогда, как настоящий фортер, решил написать собственный форт для 8-bit AVR :)
За основу взял 4-й вариант.
Исправил ошибки, пересобрал под spf для linux.
Добавил управляющие слова CREATE, DOES>
Добавил необходимые примитивы (в основном перенес из Firmware studio)
Можно использовать контроллеры mega8515, mega8, 48,88,168. Добавить новые - не проблема
В прошивку попадают только реально используемые слова (пока это реализовано полуавтоматически, в программе надо самому указать, какие слова используются)
Переделал создание листинга
Написал библиотеки:
- для подключения lcd индикаторов типа wh1602
- i2c (twi)
- часы DS1307
- ОС (диспетчер задач)
- обработчик кнопок с подавлением дребезга и автоповтором
Вроде бы все работает.
Моделировал в proteus-е и гонял на железе

Недостатки:
- постарался по мере возможности от недостатков избавиться :)

Работает и под Windows.

Смотрите примеры в каталоге examples и документацию

Буду править этот пост, помещая сюда последние версии:
Вот, собственно, результат:
http://oco.org.ua/download/forth/avrforth-1.3.tar.gz

Автор:  mOleg [ Пн янв 16, 2012 15:59 ]
Заголовок сообщения:  Re: Очередной AVRForth

oco писал(а):
Возможно будет работать и под Windows, если везде в путях поменять все прямые слэши на обратные.

под виндой слеши любые нормально проходят.

Автор:  Гость [ Пн янв 16, 2012 16:20 ]
Заголовок сообщения:  Re: Очередной AVRForth

oco писал(а):
И тогда, как настоящий фортер, решил написать собственный форт для 8-bit AVR :)


Насколько имеет смысл для 8-ми битного контроллера
использовать размер ячейки 16-бит?

P.S. на sourceforge есть ещё Форт-ы для AVR и ещё некоторое
количество в разных вариантах:)

Автор:  chess [ Пн янв 16, 2012 16:24 ]
Заголовок сообщения:  Re: Очередной AVRForth

oco писал(а):
Смотрел несколько вариантов

Вам был нужен кросскомпилятор.
oco писал(а):
Добавил необходимые примитивы (в основном перенес из Firmware studio)

Примитивами принято называть слова-команды виртуальной машины если шитый код не подпрограммный.
oco писал(а):
1. Неоптимальный по размеру код (может отказаться от макросов?).

Надо отказываться если памяти мало, а макросы туда кладутся, и программы критичны по быстродействию.
oco писал(а):
В прошивку попадают только реально используемые слова (пока это реализовано полуавтоматически, в программе надо самому указать, какие слова используются)

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

Автор:  chess [ Пн янв 16, 2012 16:35 ]
Заголовок сообщения:  Re: Очередной AVRForth

Гость писал(а):
Насколько имеет смысл для 8-ми битного контроллера
использовать размер ячейки 16-бит?

Все зависит от задач, которые нужно решать. Какова должна быть точность, если что-то измеряется или чем-то прецезионно управляем. И с какой скоростью это надо делать. Я делал на 8-ми разрядном контроллере ячейку 16-бит и поддерживал операции с двойной точностью 32-бит. При быстрых процессорах это нормально.

Автор:  Kopa [ Пн янв 16, 2012 22:43 ]
Заголовок сообщения:  Re: Очередной AVRForth

Попробовал скомпилировать примеры под spf4 для Windows
tst.spf и tst1.f скомпилировались, но размер bin файла отличается (lst и hex не сравнивал)
clock и tst_lcd пока не смог скомпилировать (лезут непонятные ошибки, возможно какую то системную переменную в spf4 необходимо "подкрутить")

P.S. В файлах для Windows плохо воспринимаемая кодировка (UTF-8). лучше, по возможности, использовать KOI8-R.
Из Firmware можно взять и ассемблер (builder), по желанию и расширить командами как в доработанном fs303m128. (там же
есть вариант плавающей точки написанный на Forth )

Автор:  oco [ Вт янв 17, 2012 00:57 ]
Заголовок сообщения:  Re: Очередной AVRForth

mOleg писал(а):
oco писал(а):
Возможно будет работать и под Windows, если везде в путях поменять все прямые слэши на обратные.

под виндой слеши любые нормально проходят.

Спасибо, попробую

Гость писал(а):
oco писал(а):
И тогда, как настоящий фортер, решил написать собственный форт для 8-bit AVR :)


Насколько имеет смысл для 8-ми битного контроллера
использовать размер ячейки 16-бит?

P.S. на sourceforge есть ещё Форт-ы для AVR и ещё некоторое
количество в разных вариантах:)


Как-то над размером ячейки не задумывался :)
На sourceforge не заходил, обязательно посмотрю

P.S
Из тех, что раньше не видел, есть FlashForth
Опять не подходит, кидает все слова в прошивку вместе с заголовками статей, в общем не кросс-транслятор.

Автор:  oco [ Вт янв 17, 2012 01:01 ]
Заголовок сообщения:  Re: Очередной AVRForth

chess писал(а):
oco писал(а):
Смотрел несколько вариантов

Вам был нужен кросскомпилятор.

Это точно!
chess писал(а):
oco писал(а):
Добавил необходимые примитивы (в основном перенес из Firmware studio)

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

Подпрограммный шитый код
chess писал(а):
oco писал(а):
1. Неоптимальный по размеру код (может отказаться от макросов?).

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

Да, тут палка о двух концах, конечно
chess писал(а):
oco писал(а):
В прошивку попадают только реально используемые слова (пока это реализовано полуавтоматически, в программе надо самому указать, какие слова используются)

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

Я думал сделать так: компилируем текущее определение не в целевую память, а куда-то отдельно, если встречаем незнакомые слова, то компилируем их в целевую память одно за другим, а затем переносим текущее определение в целевую память.

Автор:  oco [ Вт янв 17, 2012 01:06 ]
Заголовок сообщения:  Re: Очередной AVRForth

Kopa писал(а):
Попробовал скомпилировать примеры под spf4 для Windows
tst.spf и tst1.f скомпилировались, но размер bin файла отличается (lst и hex не сравнивал)
clock и tst_lcd пока не смог скомпилировать (лезут непонятные ошибки, возможно какую то системную переменную в spf4 необходимо "подкрутить")

P.S. В файлах для Windows плохо воспринимаемая кодировка (UTF-8). лучше, по возможности, использовать KOI8-R.
Из Firmware можно взять и ассемблер (builder), по желанию и расширить командами как в доработанном fs303m128. (там же
есть вариант плавающей точки написанный на Forth )

clock расчитан на мегу8, поэтому нужно в файле compile поправить название файла контроллера
tst_lcd - mega168
Но конечно, закиньте ошибки на форум, посмотрю.

Насчет кодировки - возьмите редактор, который поддерживает разные, например SciTe...
Там на русском только комментарии.

Автор:  oco [ Вт янв 17, 2012 01:29 ]
Заголовок сообщения:  Re: Очередной AVRForth

Kopa писал(а):
Из Firmware можно взять и ассемблер (builder), по желанию и расширить командами как в доработанном fs303m128. (там же
есть вариант плавающей точки написанный на Forth )

Ассемблер уже есть, только расширить немного нужно, fs303m128 смотрел, спасибо.

Автор:  chess [ Вт янв 17, 2012 09:28 ]
Заголовок сообщения:  Re: Очередной AVRForth

oco писал(а):
Я думал сделать так: компилируем текущее определение не в целевую память, а куда-то отдельно, если встречаем незнакомые слова, то компилируем их в целевую память одно за другим, а затем переносим текущее определение в целевую память.

В таком варианте придется перенос текущего определения в целевую память делать с правкой адресных смещений в коде для кода содержащего структуры управления. Поэтому я от такого варианта и воздержался.

Автор:  oco [ Вт янв 17, 2012 14:48 ]
Заголовок сообщения:  Re: Очередной AVRForth

chess писал(а):
oco писал(а):
Я думал сделать так: компилируем текущее определение не в целевую память, а куда-то отдельно, если встречаем незнакомые слова, то компилируем их в целевую память одно за другим, а затем переносим текущее определение в целевую память.

В таком варианте придется перенос текущего определения в целевую память делать с правкой адресных смещений в коде для кода содержащего структуры управления. Поэтому я от такого варианта и воздержался.

Да, придется.
Мне кажется, двухпроходный вариант сложнее. Нужно посмотреть коды инструкций условных и безусловных переходов (только относительных), может в них есть что-то общее.
Впрочем, детально еще не обдумывал.

Автор:  Wlad [ Вт янв 17, 2012 15:10 ]
Заголовок сообщения:  Re: Очередной AVRForth

Я прошу прощения, что вклиниваюсь!
А кто-нибудь встречал реализации FORTH-а для XMega ?

Автор:  chess [ Вт янв 17, 2012 15:36 ]
Заголовок сообщения:  Re: Очередной AVRForth

Wlad писал(а):
Я прошу прощения, что вклиниваюсь!
А кто-нибудь встречал реализации FORTH-а для XMega ?

Так там AVR Core CPU, поэтому любой форт под AVR пойдет. Разве что про периферию надо немного дописать. :)

Автор:  chess [ Вт янв 17, 2012 15:40 ]
Заголовок сообщения:  Re: Очередной AVRForth

oco писал(а):
Да, придется.
Мне кажется, двухпроходный вариант сложнее. Нужно посмотреть коды инструкций условных и безусловных переходов (только относительных), может в них есть что-то общее.

Вся прелесть двухпроходного варианта в том и состоит, что не надо разбираться с переходами. :)
PS. Да еще кроме главного слова, надо учитывать подпрограммы обработки прерываний. Они тоже главные слова.

Страница 1 из 11 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/