Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс янв 21, 2018 06:57

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Embedded Forth ( встраивание Форта в Си )
СообщениеДобавлено: Пн июн 22, 2009 10:45 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Добрый день.
Я в форте пока что чайник, чуть больше месяца назад вообще о нём узнал (спасибо Кора ).
Хотя припоминаю, на спектруме развлекался немного, но быстро надоело.
А теперь, поработав несколько лет в эмбеддед индустрии, вижу для себя преимущества, которые даёт форт.
Теперь к делу.
Работаю в основном с контроллерами MSP430 (F149 - в подавляющем большинстве проектов)
Хотя в будущем не исключен переход на ARM (например, Cortex M0)
Хочется для экспериментов встроить forth-движок в сишную прошивку.
Например, выделяю один UART под терминальный канал, и на его прерывание вешаю интерпретатор forth.
Допустим, он будет работать в отдельном сегменте памяти, как флеши, так и ОЗУ.
Но при этом нужно как-то интегрировать его с основной программой (функциями и переменными), чтобы можно было снаружи обращаться к сишным объектам по имени.
Для этого думаю организовать псевдо-словарь, состоящий из имён функций и ссылок на них.
Ссылки в си можно выполнить как просто указателями (и тогда это будет аналог шитого кода), либо исполняемыми указателями.
С переменными несколько сложнее, т.к. нужна не только ссылка, но и код, который кладёт адрес переменной на стек.

Конечно, лучше целиком написать всю программу на форте, но я пока к такому не готов, да и инструмента подходящего не нашёл.
Пробовал CamelForth от Бреда Родригеса, вроде бы ничего, только бы его перенести на си и интегрировать с основной программой. Скорость выполнения в принципе роли не играет, т.к. функции в данном случае ограничиваются тестовыми скриптами через терминал для отладочных целей.
По диагонали посмотрел gforth, PFE, pforth, SwiftX.
SwiftX на первый взгляд вроде ничего, но он платный (и даже очень :()
Тут что-то про eForth говорили, может, его посмотреть...

В общем, жду дельных советов и рекомендаций.
Пункт № ноль - реализация ядра форта полностью на си и интеграция его с основной программой.
Также сишная организация слов и словарей.[/b]


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 22, 2009 11:17 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
MrYuran писал(а):
Работаю в основном с контроллерами MSP430 (F149 - в подавляющем большинстве проектов)


Распределенная форт-система http://www.easy-share.com/1905815891/SPMFOR.1.7z
Отвечу на вопросы. Может приделаю оптимизатор.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 22, 2009 11:32 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6148
Благодарил (а): 14 раз.
Поблагодарили: 96 раз.
Форт на Си - очень даже рабочая конструкция. Получить принципиально работоспособный движок на самом деле можно довольно быстро. Если производительность форт-системы второстепенна, можно ориентироваться на шитый код, и получить транслятор, пригодный для и для MSP430, и для ARM.
Проблема с переменными не такая уж сложная. Их адрес известен компилятору, поэтому, реализовав функцию PushStack, легко оформить переменные в виде:
Цитата:
void ForthBase()
{
PushStack((int) & base);
}

Стек имеет смысл эмулировать. Тогда код получается достаточно простой и понятный.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 22, 2009 20:01 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Mihail писал(а):
Распределенная форт-система

А между чем распределённая?
Можно поподробнее?

Я уже качал, смотрел, с первого раза вообще ничего не понял. Потом с каждым разом понемногу проясняется, но пока ещё не до конца.

Было бы намного понятнее, если описать последовательность действий по компиляции и сборке прошиваемого образа.

Например, я написал тестовое приложение MyTest.f

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 22, 2009 20:27 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
При просмотре разных фортов очень понравилось слово SEE (не помню уже откуда), которое расколупывает слово и выводит его исходник.
Не надо лазить по исходным текстам, выискивая нужное слово (знать бы ещё, где оно спряталось :) )
Причём выводится именно то определение, которое получилось в конечном итоге. Например, CASE в исходном тексте растянулся в длинную цепочку IF-ов.
Мне очень понравилось, что на живой системе можно на ходу рассмотреть все "кишочки".

В другой системе понравилось слово (забыл как называется), которое пересобирает целевой словарь сверху вниз и оставляет только те слова, на которые есть ссылки.
То есть равносильно работе сишного линкера, когда он выкидывает неиспользуемые объекты. Можно использовать для конечной релизной сборки.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 22, 2009 23:38 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
MrYuran писал(а):
Mihail писал(а):
Распределенная форт-система

А между чем распределённая?


Между программой контроллера (проэкт SPMFOR.1\forth.IAR\forth.eww) и
программой на ПС запускаемой TST.BAT по средствам RS232.
Память контроллера представлена в виде виртуальной памяти ПС.
При обращении к памяти меньше 0x40000 (определяется THERE?B в \devel\~mak\MSP430\SRC\tc.f )
посылается соответствующая команда на контроллер ( \devel\~mak\LIB\THERE\wcthere.f)
На контроллере эту программу интерпретирует монитор MAIN_STEP_ ( \devel\~mak\MSP430\sys.f )
передав управление на процедуру из таблицы ссылок IIII .
Ответ от контролера обработает программы MAIN_S которая добавлена в TC-INTERPRET.

Пример в \test.f

MrYuran писал(а):
Потом с каждым разом понемногу проясняется, но пока ещё не до конца.


С чем прояснилось? Может я уточню-добавлю.
Часто бывает, пользователям легче понять друг-друга, чем автора.

MrYuran писал(а):
Было бы намного понятнее, если описать последовательность действий по компиляции и сборке прошиваемого образа.


в READMY некое объяснение есть. Что-то не получается?


MrYuran писал(а):
я написал тестовое приложение MyTest.f


Можно посмотреть?

MrYuran писал(а):
Какие дальнейшие действия, чтобы этот файл откомпилировался и совместно с ядром образовал загружаемую прошивку?


Если MyTest.f в корне данного директория

1. В devel\~mak\MSP430\rom.f
Код:
S" devel\~mak\MSP430\PRIM.F" INCLUDED_AL
S" devel\~mak\MSP430\HPROC.F" INCLUDED_AL
S" devel\~mak\MSP430\STRIN.F" INCLUDED_AL
S" devel\~mak\MSP430\INOUT.F" INCLUDED_AL
S" devel\~mak\MSP430\sys.f" INCLUDED_AL
S" MyTest.f" INCLUDED_AL
EXIT,
S" devel\~mak\MSP430\MAIN.F" INCLUDED_AL


2. В \forth.IAR\forth.c
Код:
void COM_CNT(){ComCnt();}
void GET_PORT(){GetPort();}

void FORTH_BOOT(){
#include "..\devel\~mak\MSP430\prim.f_al"
#include "..\devel\~mak\MSP430\hproc.f_al"
#include "..\devel\~mak\MSP430\STRIN.F_al"
#include "..\devel\~mak\MSP430\INOUT.F_al"
#include "..\devel\~mak\MSP430\sys.f_al"
#include "..\MyTest.f_al"
}

void FORTH_MAIN(int * sp){
#include "..\devel\~mak\MSP430\MAIN.F_al"
}


3. Имя главного слова вставить в MAIN в \devel\~mak\MSP430\main.f

4. запустить TST.BAT затем компиляцию IAR
и снова TST.BAT затем компиляцию IAR .


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 23, 2009 02:38 
Не в сети

Зарегистрирован: Пт фев 20, 2009 03:50
Сообщения: 20
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хищник писал(а):
Если производительность форт-системы второстепенна,

..а так оно и должно быть для всех Фортов, написанных на Си. Так говорил Родригес,
который Кэмел написал :), и не верить ему трудно :(

Но у сишных фортов неоспоримый плюс - переносимость без проблем. 8)


Я в зоопарке сишных фортов плохо ориентируюсь, но некоторые из них смотрел - похоже, для
для эмбедеда (особенно для прилинковки к сишному коду) лучше всего подойдет pforth
www.softsynth.com/pforth/
Выглядит очень легким для адаптации и удобным, работает на всем, что шевелится.
Если злые дядьки ;( требуют обязательно к форту прикрутить сишную часть - самое то.
Недостатки: нет множественных словарей(плохо), нет USER-переменных(тоже плохо, но терпимо)

Можно попробовать еще th4 http://come.to/hansoft .
Про него знаю только то, что он жутко своеобразный :(
Считается самым быстрым из написанных на Си и неубиваемым.

gforth - вещь хорошая, но для эмбедда слишком большая. Кстати, SEE именно там :)
pfe - с каждой версией все больше и задумчивее :(. Для эмбед - наверно не подойдет.
По переносимости gforth не хуже, а может даже лучше. По возможностям/скорости/размеру - тоже, похоже, уже выигрывает.

ficl - по первому впечатлению - инвалидка. Многострочных комментариев не поддерживает:(, хотя авторы обещали. ..не понравился почему-то.. выглядит неаппетитно... :?

..хмм..
говорят будто существует еще minforth, но про совсем ничего сказать не могу


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 23, 2009 07:58 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
izvr писал(а):
Я в зоопарке сишных фортов плохо ориентируюсь...


Можно, сначала сделать выборку существующих решений.

Можно упомянуть BigForth

или ещё calForth то что он для 8051 не принципиально:)
Код:
calForth is a forth language interpreter and compiler.

It's released under GPL and will run on most *nix environments.
It also includes a debugger and tracer.
It's coded in 'C' to allow easy modification.
Also, support for the 8051 processor has been added and is available in the 1.3 release.


For further information, click For further information, click

P.S. Слово See или Dis присутствует во многих Форт системах ( например spf4:)
Какое только выбрать решение из Cишного "зоопарка", чтобы прежде
всего не превышало допустимый размер на образ системы.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 23, 2009 09:43 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Mihail писал(а):
При обращении к памяти меньше 0x40000 (определяется THERE?B в \devel\~mak\MSP430\SRC\tc.f )
посылается соответствующая команда на контроллер ( \devel\~mak\LIB\THERE\wcthere.f)
На контроллере эту программу интерпретирует монитор MAIN_STEP_ ( \devel\~mak\MSP430\sys.f )

То есть целевая компиляция происходит в контроллере?
Или туда передаётся уже откомпилированное слово и укладывается в словарь?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 23, 2009 09:45 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Kopa писал(а):
Можно упомянуть BigForth

вроде бы gforth написан по его мотивам. Где-то встречал упоминание.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 23, 2009 10:07 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Kopa писал(а):
или ещё calForth

Спасибо, гляну.
readme выглядит заманчиво.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 23, 2009 11:50 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
MrYuran писал(а):
Mihail писал(а):
посылается соответствующая команда на контроллер ( \devel\~mak\LIB\THERE\wcthere.f)
На контроллере эту программу интерпретирует монитор MAIN_STEP_ ( \devel\~mak\MSP430\sys.f )

То есть целевая компиляция происходит в контроллере


Распределенная форт-система используется не для ЦК, а для отладки.
При этом, компиляция производится в ОЗ контроллера.
ЦК производится в буфер выделенный командой T-INIT.
Испольуется таже виртуальная память как и в отладочном режиме.
Только испольняются процедуры взаимодействия с памятью не из
\devel\~mak\LIB\THERE\wcthere.f , а из \devel\~mak\LIB\THERE\mthere.f
Режим ЦК или отладки задается переменной TT_?.

MrYuran писал(а):
Или туда передаётся уже откомпилированное слово и укладывается в словарь?


Используется тот-же словарь клона СПФ - spf4mwc.exe , в нем код отделен от данных.
При определении процедуры контроллера создается такая-же словарная статья,
только указатель на CFA указывает на область памяти контроллера.
Если мы в отладочном режиме введем слово во входном потоке,
найденное CFA будет подано на вход TEXECUTE , которое передаст на
контроллер все содержимое стека, там монитор выполнит процедуру по
адресу CFA и вернет модификацию стека. Т.о. производится иллюзия
запуска процедуры на локальном компьютере.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 23, 2009 14:46 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Mihail писал(а):
4. запустить TST.BAT затем компиляцию IAR
и снова TST.BAT затем компиляцию IAR .

А почему такие сложности?
И можно ли вообще без ИАРа обойтись, средствами одного форта?

Пусть с некоторой доработкой

Хотя у меня пока цель обратная - встроить форт-движок в си, не используя никакого форта.
Хотя механизм взаимодействия с внешней системой возможно пригодится.
Надо будет ещё тинибут поколупать. Там тоже что-то подобное реализовано.


Последний раз редактировалось MrYuran Вт июн 23, 2009 14:55, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 23, 2009 15:44 
Не в сети

Зарегистрирован: Вс июн 21, 2009 19:11
Сообщения: 81
Откуда: Н.Новгород
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Конкретный вопрос.
Кусочек из CamelForth:
Код:
; INDIRECT-THREADED NEXT
NEXT    MACRO
        MOV @IP+,W      ; fetch word address into W
        MOV @W+,PC      ; fetch code address into PC, W=PFA
        ENDM

Зачем нужна первая строчка?
Или вторая?
Почему нельзя было сразу MOV @IP+,PC
То есть взяли адрес следующего слова из IP, закинули в PC и передвинули указатель на 1.
Зачем ещё какой-то промежуточный W, который тоже куда-то ссылается и тоже инкрементируется?
И вообще, эта штука в конце каждого слова стоит. Оверхэд-то какой!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 23, 2009 16:19 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Похоже на косвенный шитый код.

MOV @IP+,W \ извлекает адрес поля PFA слова
MOV @W+,PC \ по этому адресу берёт адрес для исполнения машинного кода
\ может быть примитив тогда укажет на своё поле CFA
\ или на какую то другую процедуру ( например интерпритатор )
\ данных расположенных в области CFA

P.S. См. книгу Баранова там всё в картинках:)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB