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/ |