Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: А вот бы на FORTH написать...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Страницы: 1, 2, 3, 4, 5
Kopa
Цитата(MrYuran @ Jun 5 2009, 10:38) *
: Pulse ( Addr Mask --)
2DUP OR! FFFF XOR AND! ;
Формирует импульс длительностью 23 мкс при тактировании от DCO (4.8МГц)

Код
FFFF XOR


это INVERT битов
MrYuran
Цитата(Kopa @ Jun 5 2009, 12:01) *
Код
FFFF XOR

это INVERT битов

Ну , не всё так сразу.
Теперь уже нашёл.
Почти понял, как свои слова добавлять к дистрибу.
Почему-то отдельно описаны реализации в файле core430, а потом упакованы в словарь в файле hilvl430
Наверно, это правильно, но несколько неудобно править сразу в двух местах.
А вообще, паковать форт в ИАРе - неправильно.
Но на первое время сойдёт.

Что я хочу на первом этапе:
(тсз, ближайшая цель)
соорудить простейшее форт-ядро, в котором интерпретатор будет запускаться в отдельном потоке (например, по прерыванию от технологического УАРТа, либо от основного после набора секретной комбинации символов (ахалай-махалай-сим-салавим) плюс пароль).

Вот в этом направлении пока движусь.

Цитата
Почти понял, как свои слова добавлять к дистрибу.
Почему-то отдельно описаны реализации в файле core430, а потом упакованы в словарь в файле hilvl430

Всё, допёр.
в core простые слова, а в hilvl - сложные.
а моё слово не находилось, потому что надо было правильно длину указывать.

Код
: Pulse ( Mask Addr --)
    2DUP OR! >R INVERT R> AND!;

с новыми (асмовыми) определениями OR! и AND! формирует 8-мкс импульс.
Конечно, не 1мк, как на чистом асме, но уже вполне...

###########
такая ещё проблема.
если заливать исходный код, даже на скорости 9600 в конце определения или строки происходит протормаживание интерпретатора (анализ строки, поиск по словарю, компиляция) даже при компиляции в ОЗУ. С флешью к этому надо будет добавить время записи в флешь.
За это время из входного потока может потеряться несколько символов.
Пока выхожу из положения введением ведущих пробелов после каждого определения.
Хотя, если сделать динамический входной буфер и ловить символы по прерываниям, то наверно проблема исчезнет.
Kopa
Цитата(MrYuran @ Jun 5 2009, 11:43) *
Ну , не всё так сразу.
Теперь уже нашёл.


есть "волшебное" слово WORDS показывающее слова текущего контекста

Цитата(MrYuran @ Jun 5 2009, 11:43) *
А вообще, паковать форт в ИАРе - неправильно.
Но на первое время сойдёт.


можно и не паковать, а использовать только ассемблерsmile.gif


Цитата(MrYuran @ Jun 5 2009, 11:43) *
Что я хочу на первом этапе:
(тсз, ближайшая цель)
соорудить простейшее форт-ядро, в котором интерпретатор будет запускаться в отдельном потоке (например, по прерыванию от технологического УАРТа, либо от основного после набора секретной комбинации символов (ахалай-махалай-сим-салавим) плюс пароль).

Вот в этом направлении пока движусь.


Внутренний ключевые функции софта, при этом, имеет смысл оформить в виде слов
с возможностью на стеке передавать им параметры для интерактивного "тестирования"
аппаратуры.
MrYuran
Цитата(Kopa @ Jun 5 2009, 13:17) *
Внутренний ключевые функции софта, при этом, имеет смысл оформить в виде слов
с возможностью на стеке передавать им параметры для интерактивного "тестирования"
аппаратуры.

Ну да, само собой.
Я пока от возможности дёрнуть ногой по команде прихожу в восторг.

Проходящий мимо коллега смотрит скептически.
Вот если бы писать под МСП на C# и .Net Framework... biggrin.gif

Кстати, куча времени уходит обычно на написание всяческих технологических примочек с кнопочками и окошечками.
а тут - берёшь терминал по вкусу - и вперёд!
chu
Цитата(MrYuran @ Jun 5 2009, 15:55) *
Код
: Pulse ( Mask Addr --)
    2DUP OR! >R INVERT R> AND!;

с новыми (асмовыми) определениями OR! и AND! формирует 8-мкс импульс.
Конечно, не 1мк, как на чистом асме, но уже вполне...

Код
:
;C Pulse ( Mask Addr --)
        HEADER  Pulse,5,'Pulse',DOCODE
        DECD   PSP
        MOV     2(PSP),0(PSP)
        AND     @PSP+,0(TOS)
        XOR     @PSP+,0(TOS)
        MOV     @PSP+,TOS
        NEXT


Тоже должно сработать.
Kopa
Цитата(MrYuran @ Jun 5 2009, 12:24) *
Ну да, само собой.
Я пока от возможности дёрнуть ногой по команде прихожу в восторг.


Есть разработки где рисование ladder диаграмм в текстовом редакторе
прямо транслируется в программу на Форт.

Цитата(MrYuran @ Jun 5 2009, 12:24) *
Проходящий мимо коллега смотрит скептически.
Вот если бы писать под МСП на C# и .Net Framework... biggrin.gif


А знаком ли он с частью базовых принципов "экстремального" программирования
когда советуют иметь, как можно меньшие простые объекты с минимальной
необходимой тестируемостью? Меньше понятия слова в языке программирования,
трудно что то придумать.

На Javа и С# есть n-ое количество Форт систем.
и у Java и С# выходной байт код стековый. Далее.
Пишем на них и исполняем или транслируем с помощью JIT код для целевого процессора.
( с возникшими проблемами по скорости и избыточности выходного кода боремся дополнительными
ограничениями по использованию Java и С# языков или как то ещё)

Если посмотреть список контор, при принятии Форт стандарта 94г. то почти все мировые бренды.smile.gif
( но это конечно не аргументы )

Цитата(MrYuran @ Jun 5 2009, 12:24) *
Кстати, куча времени уходит обычно на написание всяческих технологических примочек с кнопочками и окошечками.


Необходимость в лёгких средствах для этого привела к созданию, в рамках spf4,
специализированного библиотечного Форт расширения от ~yz

Цитата(MrYuran @ Jun 5 2009, 12:24) *
а тут - берёшь терминал по вкусу - и вперёд!


Ага.
И даже можно снять видеоролик процесса, при этом smile.gif ( есть и примеры этого )
MrYuran
CODE
WORDS
Pulse DINT EINT !LEDS COLD .S DUMP U.R WORDS MARKER FLALIGNED ENVIRONMENT?
DEPTH MOVE WITHIN LEAVE +LOOP LOOP ENDLOOP DO L> >L REPEAT WHILE AGAIN UNTIL BE
GIN ELSE THEN IF POSTPONE ['] ; : IMMEDIATE REVEAL HIDE ] [ RECURSE DOES> (DOES>
) CREATE <BUILDS HEADER ( [CHAR] CHAR ' ABORT" ?ABORT ABORT QUIT EVALUATE INTERP
RET ?NUMBER >NUMBER ?SIGN DIGIT? LITERAL FIND IMMED? NFA>CFA NFA>LFA WORD >COUNT
ED /STRING SOURCE IC, I, IALLOT IHERE C, , ALLOT HERE HEX DECIMAL . U. SIGN #> #
S # >DIGIT <# HOLD UD* UD/MOD IWORD ." S" IS" (S") (IS") ITYPE ICOUNT TYPE ACCEP
T UMAX UMIN SPACES SPACE CR COUNT 2OVER 2SWAP 2DUP 2DROP 2! 2@ MIN MAX */ */MOD
MOD / /MOD * FM/MOD SM/REM M* DABS ?DNEGATE DNEGATE ABS ?NEGATE S>D #INIT UINIT
BL TIBSIZE TIB S0 R0 L0 PAD NEWEST IDP LP HP LATEST 'SOURCE DP STATE BASE >IN U0
,NONE !DEST ,DEST ,BRANCH ,EXIT !COLON ,JMP ,CALL ,CF !CF COMPILE, >BODY CHARS
CHAR+ CELLS CELL+ CELL ALIGNED ALIGN KEY? KEY EMIT N= S= SCAN SKIP I->D CMOVE> C
MOVE FILL UM/MOD UM* UNLOOP J I (+loop) (loop) (do) ?branch branch U> U< > < <>
= 0< 0= RSHIFT LSHIFT 2/ 2* >< 1- 1+ NEGATE INVERT XOR OR AND - M+ AND! OR! +! +
D->I IC@ I@ IC! I! FLERASE C! C@ ! @ TUCK RP! RP@ SP! SP@ R@ R> >R NIP ROT OVER
SWAP DROP ?DUP DUP USER CONSTANT VARIABLE EXIT lit EXECUTE
ok

какого-то х.. do и loop в скобках задано...
Rst7
Цитата
На Javа и С# есть n-ое количество Форт систем.
и у Java и С# выходной байт код стековый. Далее.
Пишем на них и исполняем или транслируем с помощью JIT код для целевого процессора.


Кстати, о JIT. Почему бы при использовании MSP430 не реализовать это для Форта? Есть же исполнение из RAM.
Kopa
Цитата(MrYuran @ Jun 5 2009, 11:55) *
###########
такая ещё проблема.
...


С обычным терминалом придётся изменить логику внутренней обработки входного потока
или ускорить поиск слов по словарю через хеш функции.
или перейти на более специализированные протоколы посылка - ответ
( для примера в tinyboot так сделано и дополнительно образ в кросс системе синхронизирован
с кодом в устройстве имеется также возможность к ядру компилировать посылаемые байт-коды.)


Цитата(MrYuran @ Jun 5 2009, 12:57) *
какого-то х.. do и loop в скобках задано...


Так обычно обозначают внутренние примитивные слова служащие основой для
стандартных.
MrYuran
Цитата(chu @ Jun 5 2009, 13:51) *
Код
:
;C Pulse ( Mask Addr --)
        HEADER  Pulse,5,'Pulse',DOCODE
        DECD   PSP
        MOV     2(PSP),0(PSP)
        AND     @PSP+,0(TOS)
        XOR     @PSP+,0(TOS)
        MOV     @PSP+,TOS
        NEXT


Тоже должно сработать.

Это понятно.
Короче, задача номер ноль - инлайн ассемблер (тем более что он намного проще для msp ввиду ортогональной RISC-архитектуры)

Цитата
Так обычно обозначают внутренние примитивные слова служащие основой для
стандартных.

Ага, я уже в комментариях прочитал smile.gif
Kopa
Цитата(Rst7 @ Jun 5 2009, 13:03) *
Кстати, о JIT. Почему бы при использовании MSP430 не реализовать это для Форта? Есть же исполнение из RAM.


Можно, но в общем, вопрос в решении достаточно серьёзный , если не учитывать простые приёмы.
( типа макрооптимизация, дающая хорошие результаты при постоянном введении необходимых
тех или иных правил )
Плюс ресурсы отнимаемые у контроллера. ( у Java и C# это не так просто и вливаний
финансовые могут себе позволить ) Ещё предстоит учесть, что в Форте почти отсутствует понятие
типа данных и в каких то случаях необходимо будет учитывать архитектуру внутреннего
устройства Форт системы. А так это вполне решимая задача

P.S. В классически построенной Форт системе главное достоинство, при выполнении
программой своих функций, компактность полученного кода.


Цитата(MrYuran @ Jun 5 2009, 13:20) *
Короче, задача номер ноль - инлайн ассемблер (тем более что он намного проще для msp ввиду ортогональной RISC-архитектуры)


Просто "сказка", но в отличии от PDP-11 не такая ортогональнаяsmile.gif
хотя и в PDP-11 не всё было необходимое.
Инлай ассемблер можно встроить используя возможности внутреннего существующего Форта и посмотрев
примеры реализаций ( например у приводимого выше Форта для MSP Михаилом на spf4 или другие smile.gif
Част ассемблер в Форт системах обратный, но можно и классический ( один легко следует из другого
статья этого же автора, что и Camel Forth Как написать свой (кросс-)ассемблер
© Brad Rodriguez
Можно сделать и Си подобный синтаксис ассемблераsmile.gif
Rst7
Цитата
Плюс ресурсы отнимаемые у контроллера.
...
P.S. В классически построенной Форт системе главное достоинство, при выполнении
программой своих функций, компактность полученного кода.


Дык хотя бы самые глубокие циклы JIT'ить на ходу. Можно не весь код.
chu
Цитата(MrYuran @ Jun 5 2009, 16:57) *
какого-то х.. do и loop в скобках задано...


Доступно изложено в книге Баранова и Ноздрунова " Язык Форт и его реализации"
Глава2. Реализация и расширения
2.3 Стек возвратов и реализация структур управления.

В книге описывается стандарт F83.
MrYuran
Код
: Pulses ( Mask Addr Num --)                
    0 DO                        
        2DUP                              
        Pulse                        
    LOOP
    2DROP;

2 Pulses формирует 2 импульса 8мкс с периодом 35мкc
08.gif yeah.gif
Сорри за мой мой поросячий восторг, что-то подобное испытываешь, когда начинает пищать первый мультивибратор или программа "хелловорлд" начинает мигать светодиодами... smile.gif
chu
Цитата(MrYuran @ Jun 5 2009, 18:01) *
08.gif yeah.gif
Сорри за мой мой поросячий восторг, что-то подобное испытываешь, когда начинает пищать первый мультивибратор или программа "хелловорлд" начинает мигать светодиодами... smile.gif



Здорово! cheers.gif
MrYuran
Ещё вот в глубине души борются две мысли:
Первая - (уже укоренившаяся за время писания на си) что ассемблер в тексте программы - это совсем не гут и вообще дурной стиль,
и вторая (ещё не окрепшая) - что форт - это хороший стиль программирования.
Как тут быть?
Пока вижу выход в том, чтобы писать 2 определения: одно на ассемблере, а рядом - на HiLevel.
И все ассемблерные определения - в отдельный файл типа LowLevel.F
Kopa
Цитата(Rst7 @ Jun 5 2009, 13:34) *
Дык хотя бы самые глубокие циклы JIT'ить на ходу. Можно не весь код.


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


Цитата(MrYuran @ Jun 5 2009, 14:19) *
Ещё вот в глубине души борются две мысли:
Первая - (уже укоренившаяся за время писания на си) что ассемблер в тексте программы - это совсем не гут и вообще дурной стиль,


Смотря какой ассемблер ( например kolibri ос пишут на ассемблере ) и степень его использования.
Форт, отчасти, можно считать ассемблером стековой виртуальной машины Форт.
И ассемблер в Форте не обременителен т.к. у него минимальная необходимая функциональность и
т.к. он интегрируется с Форт. Лёгкость тестирования ассемблерного определения в рамках
Форт системы тоже стоит учесть.

Цитата(MrYuran @ Jun 5 2009, 14:19) *
и вторая (ещё не окрепшая) - что форт - это хороший стиль программирования.
Как тут быть?


Размышлять, пробовать использовать smile.gif

P.S. Симулируя ядро AVR контроллера, после начального тестирования, дальнейшими
тестами уже выступают примитивы Форт системы. ( пробовал сопряжение с tinyboot )
При этом т.к. используется необходимое подмножество команд то и дальнейшие
оптимизационные стратегии кода могут более полно использоваться на ограниченном
входном материале.
Rst7
Цитата
Можно, но зачем если проще сразу указать компилятору какие циклы заинлайнить ( ускорить),
а какие оставить, для компактности как есть. JIT, всё же, требует набор статистики по
оптимизации исполнения циклов.


Ну а что, тоже правильный план. Два слова - STARTJIT и STOPJIT smile.gif
Kopa
Цитата(MrYuran @ Jun 5 2009, 14:19) *
Ещё вот в глубине души борются две мысли:
...


У меня так:
( непроходящая за время писания на си) - что форт - это лучший стиль программирования


Цитата(Rst7 @ Jun 5 2009, 14:41) *
Ну а что, тоже правильный план. Два слова - STARTJIT и STOPJIT smile.gif


И желательно в режиме простоя процессораsmile.gif
с анализом предыдущих действий пользователя.

Пока.
MrYuran
Ну вот, предварительный черновик книги готов.
Формат - doc (совершенно не предназначенный для таких документов)
Некоторые рисунки переделал, некоторые лень было или ниасилил тонкий английский юмор
Короче, вот:
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла

Блин, просто так хрен зальёшь, только с костылями...
получилось залить сплит-архив zip, ---bat.txt нужно переименовать в .bat, он склеивает обратно.

Извиняйте, если что, больше пока никак. Сисадмин прикрыл всё что можно. ftp - в том числе.

Эх, новый большой многолетний проект начинается...
Не успел форт изучить...
Придётся опять по старинке, на си...
Kopa
Цитата(MrYuran @ Jun 9 2009, 10:08) *
Ну вот, предварительный черновик книги готов.
Формат - doc (совершенно не предназначенный для таких документов)
Некоторые рисунки переделал, некоторые лень было или ниасилил тонкий английский юмор


Спасибо!

Цитата(MrYuran @ Jun 9 2009, 10:08) *
Эх, новый большой многолетний проект начинается...
Не успел форт изучить...
Придётся опять по старинке, на си...


Ничего страшного.
У меня, только, через несколько лет совпало желание и возможность использовать
Форт в работеsmile.gif
Kopa
Цитата(MrYuran @ Jun 9 2009, 10:08) *
Ну вот, предварительный черновик книги готов.
Короче, вот:


Можно взять и здесь
MrYuran
Решил таки делать кросс-систему на основе spf-4 (замахнуться тсз, на Вильяма нашего Шекспира), заодно одновременно переползаю под мандриву.
И вот такое чудо с русскими исходниками: (не совсем по теме, конечно)
Нажмите для просмотра прикрепленного файла
Как изменить кодировку - непонятно.
Какие линёвые редакторы понимают русскую кодировку?
Попробовал emacs - это что-то с чем-то!
Кстати, калькулятор там использует лисп - на форт весьма похоже
Да похоже, что и не только калькулятор.
Пока идеи роятся в голове, выхода нет, а от винды тошнит.
Эх, будет чем заняться долгими зимними вечерами!
(если к компу подпустят :-/ )

Ещё одно наблюдение:
почему-то многие редакторы определяют фортовые исходники как фортрановые...
ukpyr
Цитата
Какие линёвые редакторы понимают русскую кодировку?
юзаю GEdit. в мено File/Open внизу можно задать или добавить любую кодировку. подсветка Форта есть, если чего нет можно добавить файл синтаксиса. Есть кучка интересных плагинов, можно писать свои на Питоне.
Для меня работа в нем более привычна чем в таких монстрах как Vim/Emacs. Пробывал Eclipse/Netbeans, но тормоза и ненужные навороты (кстати редакторы в них так себе по сравнению с gedit / scite) все портят.
Есть еще Scite с похожими возможностями, там тоже вроде бы есть поддержка разных кодировок.
Для перекодирования пользуюсь iconv.
MrYuran
Цитата(ukpyr @ Jun 14 2009, 18:31) *
юзаю GEdit. в мено File/Open внизу можно задать или добавить любую кодировку. подсветка Форта есть, если чего нет можно добавить файл синтаксиса. Есть кучка интересных плагинов, можно писать свои на Питоне.

Ура, заработало!
Я тоже GEdit пользовал, только этой строчки не заметил.
Спасибо.
Kopa
Цитата(MrYuran @ Jun 14 2009, 16:01) *
Какие линёвые редакторы понимают русскую кодировку?


Возможно это поможет
Sp-Forth, Linux и Vim


Цитата(MrYuran @ Jun 14 2009, 16:01) *
Решил таки делать кросс-систему на основе spf-4 (замахнуться тсз, на Вильяма нашего Шекспира),


От чего "оттолкнутся" уже сделан выбор?

Цитата(MrYuran @ Jun 14 2009, 16:01) *
Кстати, калькулятор там использует лисп - на форт весьма похоже
Да похоже, что и не только калькулятор.


У лиспа есть некоторые сходные моменты с Фортом, но скобки,скобки.smile.gif

Ещё близок, например, Tcl построен на командах. Есть варианты "скрещивания" Tcl и Форт.

Цитата(MrYuran @ Jun 14 2009, 16:01) *
Пока идеи роятся в голове, выхода нет, а от винды тошнит.
Эх, будет чем заняться долгими зимними вечерами!
(если к компу подпустят :-/ )


Т.е. могут отлучить от компьютера biggrin.gif

Цитата(MrYuran @ Jun 14 2009, 16:01) *
Ещё одно наблюдение:
почему-то многие редакторы определяют фортовые исходники как фортрановые...


Скорее по незнанию и расширению файлов.
MrYuran
Цитата(Kopa @ Jun 15 2009, 07:27) *
От чего "оттолкнутся" уже сделан выбор?

Да вот пока не решил...
Полдня вчера исходники колупал, в некоторых местах понятно, некоторые - как китайская грамота...
Может, посоветуете что-то подобное, например, для АВР
Если в тинибуте прямо с ходу всё понятно, то тут не всё так прозрачно.
Параллельно я ещё с кэмелом буду играться, хочу пощупать вытесняющую многозадачность.
Там, правда, тоже надо ассемблер приклепать, чтобы исходное ядро каждый раз не перезаливать.
Ещё для нормальной работы нужна не только подсветка синтаксиса, но и интерактивная навигация по тексту.
Например, навожу курсор на слово, <Right Mouse> -> <GO TO DEFINITION> и попадаю на кусок, где оно определено.
Или всплывающая подсказка с комментариями (включая стековый).
Есть такие плагины к распространённым IDE?
Или готовые ИДЕ (наверняка коммерческие sad.gif )
Kopa
Цитата(MrYuran @ Jun 15 2009, 08:41) *
Да вот пока не решил...
Полдня вчера исходники колупал, в некоторых местах понятно, некоторые - как китайская грамота...
Может, посоветуете что-то подобное, например, для АВР


Какие исходники? ( и что подобное?)

Цитата(MrYuran @ Jun 15 2009, 08:41) *
Если в тинибуте прямо с ходу всё понятно, то тут не всё так прозрачно.


Может с ней и поэкспериментировать?

Цитата(MrYuran @ Jun 15 2009, 08:41) *
Параллельно я ещё с кэмелом буду играться, хочу пощупать вытесняющую многозадачность.
Там, правда, тоже надо ассемблер приклепать, чтобы исходное ядро каждый раз не перезаливать.


Можно и ядро перенести в рамках другого Форт подхода.

Цитата(MrYuran @ Jun 15 2009, 08:41) *
Ещё для нормальной работы нужна не только подсветка синтаксиса, но и интерактивная навигация по тексту.
Например, навожу курсор на слово, <Right Mouse> -> <GO TO DEFINITION> и попадаю на кусок, где оно определено.
Или всплывающая подсказка с комментариями (включая стековый).
Есть такие плагины к распространённым IDE?
Или готовые ИДЕ (наверняка коммерческие sad.gif )


Возможно в Scite есть там специально добавляли поддержку Форт языка.
( узнать поподробнее можно на форуме поддержки разработки )
MrYuran
Цитата(Kopa @ Jun 15 2009, 10:07) *
Какие исходники? ( и что подобное?)

исходники spf, особенно compiler и asm.
Возможно, у меня пока каша в голове.
Я пока представляю себе процесс следующим образом:
1. Делаю инлайн-(или кросс?)-ассемблер.
2. На основе него строю ядро таргет-системы.
3. На полученное ядро навешиваю остальное "мясо"
Таргет можно переключать каким-нибудь управляющим словом, например TARGET MSP430
или как-то по другому, не знаю пока, как правильно.
chu
Цитата(MrYuran @ Jun 15 2009, 13:35) *
Таргет можно переключать каким-нибудь управляющим словом, например TARGET MSP430
или как-то по другому, не знаю пока, как правильно.



Forth - подход подразумевает:

MSP430 TARGET ! или
MSP430 TO TARGET
laughing.gif

P.S. Go Forth!
Kopa
Цитата(MrYuran @ Jun 15 2009, 09:35) *
исходники spf, особенно compiler и asm.


Возможно стоит посмотреть на решения использования Spf4 для разных контроллеров.

на базисе spf Форт для MSP430

Цитата(MrYuran @ Jun 15 2009, 09:35) *
Возможно, у меня пока каша в голове.
Я пока представляю себе процесс следующим образом:
1. Делаю инлайн-(или кросс?)-ассемблер.
2. На основе него строю ядро таргет-системы.
3. На полученное ядро навешиваю остальное "мясо"


В разработке выше примерно так и сделано, за исключением, что выходные
бинарные коды формируются в файлы проекта для IAR ( что не обязательно )

В tinyboot для интеграции произвольного контроллера, в основном, необходимо
создать три модуля - дизасемблер, билдер ( некоторые отличия по функциональности от ассемблера),
и поддержку ядра.

P.S. Использовать, в полной, степени исходники SPF4 для MSP430 не получится, но как
вариант изучения возможной схемы можно.
В этом плане можно порекомендовать посмотреть разработку forkа spf4 от mOleg fork spf4

Цитата(MrYuran @ Jun 15 2009, 08:41) *
Полдня вчера исходники колупал, в некоторых местах понятно, некоторые - как китайская грамота...


У Форта почти нет ограничивающих факторов для конструирования программsmile.gif
MrYuran
Цитата(Kopa @ Jun 15 2009, 10:07) *
Возможно в Scite есть там специально добавляли поддержку Форт языка.
( узнать поподробнее можно на форуме поддержки разработки )

Посмотрел, замечательная вещь вместо вордпада, однако поддержка языков там на уровне подсветки синтаксиса, и форта нет
(есть nnCron), но при желании легко добавить свою конфигурацию подсветки.
Цитата
MSP430 TARGET ! или
MSP430 TO TARGET

Да, точно.

Цитата(Kopa @ Jun 15 2009, 12:03) *
выходные бинарные коды формируются в файлы проекта для IAR ( что не обязательно )

Не только не обязательно, а категорически нежелательно.
В крайнем случае под GCC
Цитата(Kopa @ Jun 15 2009, 12:03) *
У Форта почти нет ограничивающих факторов для конструирования программsmile.gif

Вот это и привлекает, причём для построения своей системы или изменения существующей не обязательно перелопачивать горы талмудов типа гнушных мануалов (mspgcc собрать так и ниасилил, видать не дорос пока...)
MrYuran
Только что вот наткнулся ещё на одну книжку (pdf)
типа сборной солянки из многих источников.
FORTH Spirit of Babylon, (С) RU FIG, Понятов Д.А.
Kopa
Цитата(MrYuran @ Jun 15 2009, 12:39) *
Только что вот наткнулся ещё на одну книжку (pdf)
типа сборной солянки из многих источников.
FORTH Spirit of Babylon, (С) RU FIG, Понятов Д.А.


Раньше этот материал распологался здесь у Понятов Д.А.
( сейчас, похоже, url уже битый )

Цитата(MrYuran @ Jun 15 2009, 11:21) *
(mspgcc собрать так и ниасилил, видать не дорос пока...)


Можно собрать LCC для MSP с разным выходным кодом.
Правда оптимизатор там слабыйsmile.gif
MrYuran
Цитата(Kopa @ Jun 15 2009, 12:03) *
Возможно стоит посмотреть на решения использования Spf4 для разных контроллеров.
на базисе spf Форт для MSP430
В разработке выше примерно так и сделано, за исключением, что выходные
бинарные коды формируются в файлы проекта для IAR ( что не обязательно )

а, теперь до меня таки дошло, что там происходит!
Осталось разобраться в механизмах...
Опять же, очень не хватает "View Definition"...
Насколько я понял, исходник, который компилируется, это ~mak/msp430/src.f
Однако, не совсем понятно, что именно будет включено в конечный образ.
CODE

REQUIRE CASE-INS lib\ext\caseins.f

: MREAD-FILE READ-FILE ;
: MC! C! ;
: MC@ C@ ;
: MW! W! ;
: MW@ W@ ;
: M! ! ;
: M@ @ ;
: M+ + ;
: MNEGATE NEGATE ;
: MOVER OVER ;
: MAND AND ;
: MCR CR ;
: MEXECUTE EXECUTE ;
: MVARIABLE VARIABLE ;

REQUIRE >NAME ~mak\LIB\fpc.f
REQUIRE NUMBER? ~mak\LIB\fpcnum.f


TRUE VALUE QUICK
: SL\ POSTPONE \ ; IMMEDIATE

[DEFINED] GUI-CONSOLE
[IF] : FJB GUI-CONSOLE::FlushJetBuf ;
[ELSE] : FJB ;
[THEN]


REQUIRE TC_?LIMIT ~mak\LIB\THERE\STAT.f


MODULE: TC_M
REQUIRE T_@ ~mak\LIB\THERE\mthere.f
;MODULE
REQUIRE TH_H- ~mak\LIB\THERE\RECOM.F

\ REQUIRE CS-! ~mak\ext.f

REQUIRE ASMINF_MOD ~mak\MSP430\SRC\ASMMSP.f

~mak\MSP430\SRC\LEX.F
~mak\MSP430\SRC\prefix.f



\ EOF
\ REQUIRE DISMSP ~mak\MSP430\SRC\DISMSP.f
: M\ POSTPONE \ ; IMMEDIATE
REQUIRE T-START ~mak\MSP430\SRC\tc.f

[IFNDEF] W>S
: W>S ( w -- n ) \ Расширение знакового 16 разрядонго числа до 32 разрядного
0xFFFF AND \ удаляем грязь из старших разрядов
0x8000 XOR 0x8000 - ;
[THEN]


: HH.+ DUP C@ 2 H.R 1+ ;
: INST.+
HH.+ ." " ;

: MINST ( ADDR1 ADDR2 -- ADDR1 ADDR1 )
\ F7_ED
DUP H. 9 EMIT 9 EMIT INST.+
BEGIN 2DUP U>
WHILE \ DUP 7 AND 0= IF CR DUP H. 9 EMIT THEN
INST.+
REPEAT ;


REQUIRE INCLUDED_AL ~mak\LIB\THERE\mlist.f
\ DIS-OPT

0 VALUE ROM-HERE

0 VALUE FID


CREATE FTST 0x2000 ALLOT


CASE-INS ON

0x4000 TO CODE-SIZE

0xFC00 TO T-ORG \ Начальный целевой адрес области кода

T-ORG VALUE MT-ORG
0x5000 TO D-ORG \ Начальный целевой адрес области данных
0x5000 CONSTANT SP0@ \ дно стека данных
0x7F00 CONSTANT RP0@ \ дно стека возвратов
\ CREATE CS-ORG 1 CS-CELLS ALLOT

T-ORG TO INCL-HH

' NOOP TO <PRE>
[DEFINED] DBG_STOP [IF] DBG_STOP [THEN]

CR .( T-ORG=) T-ORG H.

\ S" devel\~mak\MSP430\BLOAD.F" INCLUDED \EOF

T-START

S" devel\~mak\MSP430\ROM.f" INCLUDED
HERE TO ROM-HERE
MCR .( ROM=) HERE T-ORG - .
.( safasfs)
S" F.C" CSAVE
S" F.BIN" TSAVE
S" F.HEX" T-SAVE
\ T-ORG HERE OVER ALSO FORTH - PREVIOUS DISMSP

T-STOP



Ладно, пойду пока тренироваться на кошках (верблюдах smile.gif )
Там вроде всё прозрачно.
Kopa
Цитата(MrYuran @ Jun 15 2009, 15:20) *
Насколько я понял, исходник, который компилируется, это ~mak/msp430/src.f
Однако, не совсем понятно, что именно будет включено в конечный образ.


Можно предположить, что содержимое файла rom.f c формированием выходных файлов *.f_al
и они и используются при сборке в проекте IAR ещё далее формируются с, bin, hex файлы
содержимое FORTH_IMG ( наверное пробный cм. в main если его подключить, то первые байты это код примитива DUP )
CODE

...
T-START

S" devel\~mak\MSP430\ROM.f" INCLUDED
...

HERE TO ROM-HERE
MCR .( ROM=) HERE T-ORG - .
.( safasfs)
S" F.C" CSAVE
S" F.BIN" TSAVE
S" F.HEX" T-SAVE
\ T-ORG HERE OVER ALSO FORTH - PREVIOUS DISMSP

T-STOP


Цитата(MrYuran @ Jun 15 2009, 15:20) *
Ладно, пойду пока тренироваться на кошках (верблюдах smile.gif )
Там вроде всё прозрачно.


Удачи!.


Цитата(MrYuran @ Jun 15 2009, 15:20) *
Опять же, очень не хватает "View Definition"...


Хорошо помогает Поиск по словам в Far:)



Цитата(MrYuran @ Jun 15 2009, 15:20) *
а, теперь до меня таки дошло, что там происходит!
Осталось разобраться в механизмах...


Да у Михаила свой, неповторимый, способ Форт программирования.
Достаточно посмотреть на его макрооптимизатор в spf4 smile.gif
MrYuran
Сейчас ещё глянул SwiftX - вот практически эталон того, что мне нужно.
Жаль, без исходников...
Но кое-что можно почерпнуть.
Например, отличный стиль, а также готовые файлы описания периферии
(кстати, я имею право их использовать, сохранив копирайт?)
Kopa
Цитата(MrYuran @ Jun 16 2009, 10:50) *
Сейчас ещё глянул SwiftX - вот практически эталон того, что мне нужно.
Жаль, без исходников...
Но кое-что можно почерпнуть.


Вроде какая то версия для PC имеет исходники

Цитата(MrYuran @ Jun 16 2009, 10:50) *
Но кое-что можно почерпнуть.


Можно при изучении брать материал из разных Форт системsmile.gif ( и не только комерческих )

Цитата(MrYuran @ Jun 16 2009, 10:50) *
Например, отличный стиль, а также готовые файлы описания периферии
(кстати, я имею право их использовать, сохранив копирайт?)


Не знаю, но думаю не возбраняетсяsmile.gif
mak4444
Цитата(Kopa @ Jun 16 2009, 07:27) *
Можно предположить, что содержимое файла rom.f c формированием выходных файлов *.f_al
и они и используются при сборке в проекте IAR


Так и есть.

Цитата
ещё далее формируются с, bin, hex файлы
содержимое FORTH_IMG ( наверное пробный cм. в main если его подключить, то первые байты это код примитива DUP )


Командами сохранения загрузочного образа:
S" F.C" CSAVE
S" F.BIN" TSAVE
S" F.HEX" T-SAVE

Можно будет пользоваться если вся программа будет скомпилирована средствами Форта. В данном примере,
часть программы компилируется средстваим IAR . Честно говоря, компиляция конечного модуля
в взаимодействии с IAR не очень удобна. При изменении целевой программы в части форта ( devel\~mak\MSP430\rom.f )
требуется запустить TST.BAT затем компиляцию IAR и снова TST.BAT затем компиляцию IAR . Это чтобы правильно установились
ссылки. Программа для прошивки данного примера является частью распределенной форт системы. Если контроллер с данной
прошивкой подъкрючить к COM порту персоналки, то запустив TST.BAT можно взаимодействовать с удаленным контроллером
в интерактивном режиме. Для примера можно запустить TEST.F затем TEST .
Для генерации листинга:
S" TEST.F" INCLUDED_AL
Еще рекомендую комманду E>
E> +
E> MAIN
E> TEST
В редакторе, клавиша F11 - гипертекстовый вызов определения форт-слова.
Клавиша F12 - вернутся обратно.
MrYuran
Вот такой кусочек из asm.f
Код
( DEFER SOME WORDS FOR EASE IN PORTING TO A CROSS ASSEMBLER )
DEFER     CODE-C, '     C, IS     CODE-C, ( X -- )
DEFER     CODE-W, '     W, IS     CODE-W, ( X -- )
...

Что такое DEFER и почему это облегчает портирование?
Kopa
Цитата(MrYuran @ Jun 16 2009, 21:17) *
Вот такой кусочек из asm.f
Код
( DEFER SOME WORDS FOR EASE IN PORTING TO A CROSS ASSEMBLER )
DEFER     CODE-C, '     C, IS     CODE-C, ( X -- )
DEFER     CODE-W, '     W, IS     CODE-W, ( X -- )
...

Что такое DEFER и почему это облегчает портирование?


DEFER ИМЯ создаёт векторное слово
xt IS ИМЯ определяет его текущее наполнение
простой вариант получения xt ' СЛОВО


P.S. DEFER ( в spf4 VECT ) часто определяются для использования когда
конкретное его наполнение еще не определено, но использование целесообразно.
Например в tinyboot DEFER позволяет в процессе использования конкретного контроллера вынести
вариантную часть во время настройки на работу с ним не пересобирая базовое ядро кросс системы.
Вопросы?
MrYuran
Цитата(Kopa @ Jun 17 2009, 07:09) *
Вопросы?

Вопросы появляются в процессе, а не при таких занятиях урывками, как у меня.
Сегодня случайно занесло меня в англоязычную педию, разница ощутима.
Наши хоть бы для начала английскую версию перевели...
Очень развёрнутая статья про форт, оттуда попал на gforth - первое впечатление очень положительное.
Особенно от документации.
Сейчас докачаю исходники, буду смотреть.
С GСС отношения более-менее сложились, по крайней мере легче будет оттолкнуться, чем от пустого места.
Kopa
Цитата(MrYuran @ Jun 17 2009, 08:45) *
Сегодня случайно занесло меня в англоязычную педию, разница ощутима.
Наши хоть бы для начала английскую версию перевели...


Что понравилось? Английская версия
И в чём русская статья "проиграла"? Русская версия


Цитата(MrYuran @ Jun 17 2009, 08:45) *
Очень развёрнутая статья про форт, оттуда попал на gforth - первое впечатление очень положительное.
Особенно от документации.
Сейчас докачаю исходники, буду смотреть.


На Си есть ещё много Форт реализацийsmile.gif ( BigForth, kforth, ficl, pforth ... )
На асме, например, reva, retro. и ещё интересны разные подходы в других Форт системахsmile.gif
и близких разработок ( например давнишняя Timbre - из Форта делает Cи код для ускорения )

Цитата(MrYuran @ Jun 17 2009, 08:45) *
С GСС отношения более-менее сложились, по крайней мере легче будет оттолкнуться, чем от пустого места.


Возможно GCC уже оптимизирует Форт реализации? Было бы неплохо.
MrYuran
Цитата(Kopa @ Jun 17 2009, 10:02) *
Возможно GCC уже оптимизирует Форт реализации? Было бы неплохо.

Система работает как компилятор: gforth *.fs [ключи]

Ещё бросилась в глаза система автодокументирования по типу doxygen, через \G
Код
: save-input ( -- x1 .. xn n ) \ core-ext
    \G The @i{n} entries @i{xn - x1} describe the current state of the
    \G input source specification, in some platform-dependent way that can
    \G be used by @code{restore-input}.
    (save-input) current-input @ swap 1+;

из си перекочевало include, хотя в форте это по-моему require с небольшими нюансами
А, нет, нашёл.
Код
: include  ( ... "file" -- ... ) \ gforth
    \G @code{include-file} the file @var{file}.
    name included;

: require  ( ... "file" -- ... ) \ gforth
    \G @code{include-file} @var{file} only if it is not included already.
    name required;

Всё-таки разные вещи.
MrYuran
Насколько я понял из беглого диагонального прочтения доки, есть возможность включения форт-ядра в программы на си (например, в качестве скриптового движка), и есть возможность обращения к сишным функциям и библиотекам из форта.
Использование ассемблера в тексте не приветствуется.
В данный момент читаю про кросс-компиляцию (пока наиболее актуально для меня, уже хочется что-то склепать).
Также упомянута тесная интеграция с emacs, включая возможность компиляции.
Тоже интересно.

Наконец-то скачал эти несчастные 6 метров (по 1к/с)
Попробовал.
Убойная штука see !!!
"Скриншот" терминала:
Код
see code
: code
  header here 8 + cfa, 0 init-asm; ok
  ok
see :
: :
  header (:noname); ok
see 2DUP
Code 2dup
( $402FE3 )  mov     dword ptr 42A6F8 , ebx  \ $89 $1D $F8 $A6 $42 $0
( $402FE9 )  mov     eax , dword ptr 4 [esi]  \ $8B $46 $4
( $402FEC )  mov     edx , dword ptr [esi]  \ $8B $16
( $402FEE )  sub     esi , # 8  \ $83 $EE $8
( $402FF1 )  add     ebx , # 4  \ $83 $C3 $4
( $402FF4 )  mov     dword ptr 4 [esi] , eax  \ $89 $46 $4
( $402FF7 )  mov     dword ptr [esi] , edx  \ $89 $16
( $402FF9 )  mov     edi , dword ptr FC [ebx]  \ $8B $7B $FC
( $402FFC )  jmp     4014A4  \ $E9 $A3 $E4 $FF $FF
end-code
ok

Получается встроенный дизассемблер-дисфорт!
Ох...рененная штука!
Kopa
Цитата(MrYuran @ Jun 17 2009, 12:13) *
В данный момент читаю про кросс-компиляцию (пока наиболее актуально для меня, уже хочется что-то склепать).


Для кросс компиляции понадобится создание ассемблера целевой архитектуры и ядра примитивов
в рамках базиса gforth. по примеру содержимого каталога \arch а дальше необходимо изучение
интеграционных возможностей gforth

P.S. Схема построения gforth, возможно, переусложнена.
А тесная реализация Форт скриптования при использовании Cи реализации есть, наверное, во всех
Форт системах сделанных на Cи и не только.smile.gif

В spf4 для целей макрооптимизации примитивы "разбавлены" служебной информацией и peephole тоже
присутствует, но как я понял пока задачи увеличения "абстрактной" производительности особо не актуальна, в отличии от задачи уплотнения кода.
В gforth примитивы генерируются с помощью утилиты vmgen и оптимизатор Cи не особо может повлиять
на код примитивов. ( если учесть что сопряжение будет создано определённым способом, то декомпилятором
можно получить ассемблерные кода примитивов и далее их использовать)
MrYuran
Цитата(Kopa @ Jun 17 2009, 12:57) *
Для кросс компиляции понадобится создание ассемблера целевой архитектуры и ядра примитивов
в рамках базиса gforth

А по-моему, достаточно оформить только mashine.h, если не предусматривается использование инлайн-ассемблера
Например, вот для ARM (асм и дизасм отсутствуют)
CODE

#if !defined(USE_TOS) && !defined(USE_NO_TOS)
#define USE_TOS
#endif

#ifndef USE_FTOS
#ifndef USE_NO_FTOS
#define USE_FTOS
#endif
#endif

#include "../generic/machine.h"
#include <sys/types.h>

/* this calls a dummy function in cacheflush0.S */
/* you can replace it through "./configure arm_cacheflush=<file>" */
/* if you know how to flush the icache on the arm in general, mail me */
#define FLUSH_ICACHE(addr,size) cacheflush(addr,size)
void cacheflush(void *p, size_t size);

#if defined(FORCE_REG) && !defined(DOUBLY_INDIRECT) && !defined(VM_PROFILING)
/*
according to http://mail-index.netbsd.org/port-arm/2003/05/17/0000.html:

R0-R3: argument passing/caller-saved
R4-R10: callee-saved
R12, R14: caller-saved
R11: frame pointer
R13: stack pointer
*/
/* works with gcc-2.95.2 */
#define RPREG asm("r7")
#endif

а потом подцепить целевой компилятор в мэйкфайле
Хотя ассемблер для MSP намного проще чем для того же 8080
Цитата(Kopa @ Jun 17 2009, 12:57) *
В gforth примитивы генерируются с помощью утилиты vmgen и оптимизатор Cи не особо может повлиять
на код примитивов.

Зато код не привязан к платформе, я тоже такой позиции придерживаюсь.
Тем более, что это всего лишь (как я понял) один из способов построения системы.
Можно и традиционным способом.
Kopa
Цитата(MrYuran @ Jun 17 2009, 13:36) *
А по-моему, достаточно оформить только mashine.h, если не предусматривается использование инлайн-ассемблера


Хорошо если это так. ( При этом остаётся неясным как будет создан терминальный канал)
Размер сгенерированного выходного файла может оказаться большим.

Цитата(MrYuran @ Jun 17 2009, 13:36) *
Зато код не привязан к платформе, я тоже такой позиции придерживаюсь.


Не привязан к платформе язык программирования также как и Форт можно
использовать в такой схеме ( например реализовав поддержку минимального числа примитивов, как
в eForth), но Си поддержка уже есть в MSP компиляторе.smile.gif

Цитата(MrYuran @ Jun 17 2009, 13:36) *
Тем более, что это всего лишь (как я понял) один из способов построения системы.
Можно и традиционным способом.


Предполагаю, что это не будет последним вариантом создания Форт системыsmile.gif

P.S. В gforth есть ещё рекомендация использовать файл cross.fs
MrYuran
Ещё вот такой вопросец не выходит из головы.
Каждое слово заканчивается джампом либо на интерпретатор, либо на следующее слово.
При большом количестве коротких слов (а гуру рекомендуют среднюю длину определения 3-4 слова) получаем большое количество переходов, которые сбрасывают конвейер и сильно замедляют работу по сравнению с линейным кодом.
Конечно, не так сильно, как переход по call-у с передачей параметров, но всё-таки.

Или это "обратная сторона медали", плата за компактность кода и простоту системы?
Kopa
Цитата(MrYuran @ Jun 18 2009, 12:54) *
Ещё вот такой вопросец не выходит из головы.
Каждое слово заканчивается джампом либо на интерпретатор, либо на следующее слово.
Конечно, не так сильно, как переход по call-у с передачей параметров, но всё-таки.

Или это "обратная сторона медали", плата за компактность кода и простоту системы?


Конечно плата т.к. такая реализация, а компактность ещё можно увеличить если
перейти к байт-коду.smile.gif

P.S. Компромис, конечно, и в этом случае может существовать,
например частично использовать инлайн и неглубокие местные оптимизации, при необходимости.
В tinyboot это примерно так и существует. Хорошо иметь при этом профилировщик для
выявления и оценки проблемных мест кода.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.