Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: А вот бы на FORTH написать...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Страницы: 1, 2, 3, 4, 5
MrYuran
Только что ещё PFE качнул. Буду тоже смотреть.
Пока осматриваюсь для расширения кругозора.
Да и вдруг подходящее что-то готовое есть.
Хочется простенькое c-based ядро, чтобы для начала его впихнуть в общую прошивку как бонус и подцепить на технологический UART.
Активный датчик со встроенным скриптовым движком - крута!

Кстати, а если в си определить переменные как структуры из поля имени и поля значения, то их и из форта видно будет smile.gif
только длину имени придётся единообразной делать.
Например, урезать до 5 символов. Заодно и расход памяти меньше.
Kopa
Цитата(MrYuran @ Jun 18 2009, 15:11) *
Только что ещё PFE качнул. Буду тоже смотреть.
Пока осматриваюсь для расширения кругозора.


Со своей стороны могу попробовать сделать выборку существующих решений Фортsmile.gif
( по мере возможностей ) PFE, вроде с доработкой, использовал Tectroniх.

Цитата(MrYuran @ Jun 18 2009, 15:11) *
Да и вдруг подходящее что-то готовое есть.


Наверное. Но где та "золотая" середина? Форт системы бывают такие разные.

Цитата(MrYuran @ Jun 18 2009, 15:11) *
Хочется простенькое c-based ядро, чтобы для начала его впихнуть в общую прошивку как бонус и подцепить на технологический UART.


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

Цитата(MrYuran @ Jun 18 2009, 15:11) *
Активный датчик со встроенным скриптовым движком - крута!


И компилятором, как бонус. Защиту только от "дурака" необходимо сделать.

Цитата(MrYuran @ Jun 18 2009, 15:11) *
Кстати, а если в си определить переменные как структуры из поля имени и поля значения, то их и из форта видно будет smile.gif
только длину имени придётся единообразной
Например, урезать до 5 символов. Заодно и расход памяти меньше.


Можно вообще не иметь имён, а в посылках использовать xt идентификаторы.

P.S. Мнение разработчиков российской линейки ...
Форт контроллеров
Код
...
       Патентно-чистый МП реализован на базе языка высокого уровня FORTH, который обладает рядом конкурентных преимуществ:
- требует меньших аппаратных затрат для достижения эквивалентной производительности;
- программирование на языке высокого уровня для встроенных приложений;
- предельно быстрое переключение  при прерывании;
- высокая производительность при реализации систем управления реального времени;
- простота создания и высокая скорость отладки прикладных программ;
- высокая надежность создаваемых программ
MrYuran
Цитата(Kopa @ Jun 18 2009, 15:35) *
Можно вообще не иметь имён, а в посылках использовать xt идентификаторы.

А подробнее можно? Я пока слабо ориентируюсь в терминологии
Цитата(Kopa @ Jun 18 2009, 15:35) *
P.S. Мнение разработчиков российской линейки Форт контроллеров K1894ВГ1T ...

Моё мнение - FPGA-based Forth Kernel - наилучшее применение.
Вместо того чтобы всякую несуразицу навроде 51 ядра туда пихать

За наших производителей рад, однако сайты у них - как обычно, как будто какой-то студент на полставки оформляет laughing.gif
Kopa
Цитата(MrYuran @ Jun 18 2009, 15:54) *
А подробнее можно? Я пока слабо ориентируюсь в терминологии


xt в Форт терминологии это исполнимый токен
Например
Код
' Имя ( -- хt )

Исполнить можно с помощью EXECUTE ( xt -- ... )

В tinyboot образ в контроллере и IDE синхронизованы ( если сильно не меняются ) и
поэтому для исполнения конкретного слова посылается xt необходимого слова
по отладочному интерфейсу.

Цитата(MrYuran @ Jun 18 2009, 15:54) *
Моё мнение - FPGA-based Forth Kernel - наилучшее применение.
Вместо того чтобы всякую несуразицу навроде 51 ядра туда пихать


Тоже за, но вот потребление и цена ...

Цитата(MrYuran @ Jun 18 2009, 15:54) *
За наших производителей рад, однако сайты у них - как обычно, как будто какой-то студент на полставки оформляет laughing.gif


Это похоже на симптомы общей болезни unsure.gif
Kopa
Цитата(MrYuran @ Jun 18 2009, 15:11) *
Только что ещё PFE качнул. Буду тоже смотреть.
Пока осматриваюсь для расширения кругозора.


Pforth тоже можно посмотреть.

P.S. Для MSP430 ещё на sourceforge был проект FVM430 ( проект остался, а файлов нет )
можно поднять из архива.
MrYuran
Цитата(Kopa @ Jun 19 2009, 08:20) *
Pforth тоже можно посмотреть.

Спасибо, кажется, намного проще, чем PFE.
И есть забавная фича:
Цитата
\ @(#) clone.fth 97/12/10 1.1
\ Clone for PForth
\
\ Create the smallest dictionary required to run an application.
\
\ Clone decompiles the Forth dictionary starting with the top
\ word in the program. It then moves all referenced secondaries
\ into a new dictionary.
\
\ This work was inspired by the CLONE feature that Mike Haas wrote
\ for JForth. Mike's CLONE disassembled 68000 machine code then
\ reassembled it which is much more difficult.

Пересобирает словарь сверху вниз, включая в него только используемые слова.
Если к нему ещё инлайн-оптимизатор подцепить, то вообще зашибись

Эх, жаль, скоро опять на работе работать заставят... Только начнешь в чего-то въезжать - опять подсунут какую-то срочную гадость...

Цитата(Kopa @ Jun 19 2009, 08:20) *
P.S. Для MSP430 ещё на sourceforge был проект FVM430 ( проект остался, а файлов нет )

Да есть файлы, только в svn, а у нас сисадмин поотрубал все порты нахрен...
Дома попробую скачать.
Kopa
Цитата(MrYuran @ Jun 18 2009, 15:11) *
Хочется простенькое c-based ядро, чтобы для начала его впихнуть в общую прошивку


В плане возможной эффективной реализации на С:
Крис Касперски
Борьба с утечками ресурсов и переполняющимися буферами на языковом и внеязыковом уровне


Выдержка:

Код
Одним их самых мерзких недостатков языка Си является отсутствие поддержки динамических стековых массивов. Стековая память хороша тем, что автоматически освобождается при выходе из функции, однако выделение стековых массивов "на лету" невозможно и мы должны заранее объявить их размеры при объявлении переменных. В C99 сделаны небольшие подвижки в этом направлении и теперь мы можем объявлять массивы, размер которых задается аргументом, передаваемым функции, однако это не решает всех проблем и к тому же C99 поддерживают далеко не все компиляторы.
MrYuran
Начинаю закапываться вглубь smile.gif
Разбираюсь с реализацией шитого кода.
Вот с непрямым (подпрогрсмным) - вроде всё понятно.
Пишем CALL на начало тела следующего слова, в конце слова RET.
Вроде всё сходится.
А прямой код что делает?
Каждый раз возвращает управление интерпретатору?
А тот джампит на следующее слово.
По-моему, так.
Сейчас идея забавная в голову пришла. А что, если немного модифицировать данную схему?
например, отказываемся от интерпретатора (который только лишний раз перепинывает туда-сюда), а в начало каждого слова встраиваем небольшой сервис, который будет грузить тело данного слова на стек возвратов (разумеется, в обратном порядке).
Или не встраивать, а вызывать.
Только тогда нужно будет ещё длину слова где-то обозначить.
А в конце каждого слова ставим RET.
Получается, что мы вызываем интерпретатор один раз (оптом) на всё слово.
Таким образом, получаем максимально короткий код, с одной стороны, а с другой - повышенное быстродействие и уменьшение количества переходов и перезагрузок конвейера (говорят, в АРМах это очень критично)

Или я тут ерунду понаписал?
Kopa
Цитата(MrYuran @ Jun 19 2009, 16:12) *
Начинаю закапываться вглубь smile.gif
Разбираюсь с реализацией шитого кода.


Поиск обсуждения Шитый код на Форт форуме
можно и там проводить обсуждения.

Цитата(MrYuran @ Jun 19 2009, 16:12) *
А прямой код что делает?
Каждый раз возвращает управление интерпретатору?
А тот джампит на следующее слово.
По-моему, так.


В проблематику шитого кода мне не приходилось глубоко вникатьsmile.gif

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

Цитата(MrYuran @ Jun 19 2009, 16:12) *
Сейчас идея забавная в голову пришла. А что, если немного модифицировать данную схему?
например, отказываемся от интерпретатора (который только лишний раз перепинывает туда-сюда), а в начало каждого слова встраиваем небольшой сервис, который будет грузить тело данного слова на стек возвратов (разумеется, в обратном порядке).
Или не встраивать, а вызывать.


Пересылки кода возможны, если есть смысл ( подобие кеша ) и если это не приведёт
к неучтённым трудностям.smile.gif

Цитата(MrYuran @ Jun 19 2009, 16:12) *
Только тогда нужно будет ещё длину слова где-то обозначить.
А в конце каждого слова ставим RET.
Получается, что мы вызываем интерпретатор один раз (оптом) на всё слово.


Варианты допустимы любые, на то он и Фортsmile.gif

Цитата(MrYuran @ Jun 19 2009, 16:12) *
Таким образом, получаем максимально короткий код, с одной стороны, а с другой - повышенное быстродействие и уменьшение количества переходов и перезагрузок конвейера (говорят, в АРМах это очень критично)


У ARM в самом коде операции присутствует условие её выполнения и проблем с исполнением
Форт кода, предположительно, должно быть меньше.

Цитата(MrYuran @ Jun 19 2009, 16:12) *
Или я тут ерунду понаписал?


Только практика может это определитьsmile.gif

Пока.
mOleg
Цитата(MrYuran @ Jun 19 2009, 15:12) *
А прямой код что делает?
Каждый раз возвращает управление интерпретатору?
А тот джампит на следующее слово.
По-моему, так.

вобщем почти так. Вообще классическим для Форта считается косвенный шитый код (ITC) с него стоит начинать разбираться с методикой интерпретации кода. Дело в том, что интерпретатора, как такового вобщем-то и нет. Точнее весь интерпретатор поделен между словами NEXT EXIT ENTER (последнее слово не обязательно так называется, но его суть сохранить адрес возврата на стеке возвратов и выполнить NEXT)
если вас устроит описание на английском видов ШК, то вам сюда

Цитата(MrYuran @ Jun 19 2009, 15:12) *
Сейчас идея забавная в голову пришла. А что, если немного модифицировать данную схему?

все же советую сначало разобраться с существующими типами ШК.
Кстати, я бы поостерегся что-то еще называть ШК за пределами Форта...

Но еще лучше обсуждать эти все вопросы на специальном для того созданном форуме, так как большинство фортеров туда, а не сюда захаживает, да и ваши вопросы и ответы на них могут быть интересны другим людям wink.gif

Да, обратите внимание (если еще не зарегистрировались на Forth форуме), что регистрация не автоматическая - надо писать письмо админу (бо спамерюги замучили)
MrYuran
Цитата(mOleg @ Jun 20 2009, 04:35) *
Да, обратите внимание (если еще не зарегистрировались на Forth форуме), что регистрация не автоматическая - надо писать письмо админу (бо спамерюги замучили)

Да я вроде уж пытался, да что-то помешало... А может, не помешало, надо бы почту проверить.
Kopa
Цитата(MrYuran @ Jun 21 2009, 18:59) *
Да я вроде уж пытался, да что-то помешало... А может, не помешало, надо бы почту проверить.


Аккаунт уже активированsmile.gif

P.S. Один из возможных вариантов сделать Форт для MSP430 это использовать
базис PDP-11 для tinyboot т.к. архитектуры близкие. n-ое время назад была
первая, не завершённая, попытка сделать этоsmile.gif
MrYuran
Всё, временно перемещаюсь на fforum , а сюда выложу конечный результат (если будет), ну или промежуточный. (ые)
MrYuran
Цитата(chu @ Jul 7 2009, 09:08) *
Запись в регистры ADC12 произведена с консоли, напрямую, соответственно таким же образом и считаны ( приведенный "код" - копипаст с форт-консоли ).

А каким фортом для MSP пользуетесь?
chu
Цитата(MrYuran @ Jul 7 2009, 20:15) *
А каким фортом для MSP пользуетесь?


Вынужден огорчить laughing.gif , никакого особого форта для MSP430 у меня нет, пишу на ассемблере.

НО! Forth - это прежде всего технология программирования ( философия решения задач ), и уже затем - язык и всё такое прочее...

Первый источник идеи - A 3-INSTRUCTION FORTH FOR EMBEDDED SYSTEMS WORK http://pygmy.utoh.org/3ins4th.html
Второй - виртуальная форт-машина, аналогичная имеющейся в SwiftX MSP430,
а также небольшой набор традиционных для форта примитивов, реализованных на ассемблере.
Плюс форт-сервер ( в терминологии не уверен) созданный в ростокском универе во времена оно.
Высокоуровневое определение этого сервера :

: Server BEGIN addr execute ACK char_send AGAIN ;

Как это работает.
Иаровский асм генерит код , который шьется в чип, кроме этого генерит "таблицу перекрестных ссылок" ( my_application.map ), в которой приводится однозначное соответствие цепочка_символов == число. Вырезка из этого файлика скармливается SPF4:

CODE
\

\
\ в словаре XTARGET создаются словари MSP430, TARGET, XDEBUG
\

VOCABULARY XTARGET ALSO XTARGET DEFINITIONS

VOCABULARY MSP430 \ определения регистров и битов процессора
VOCABULARY TARGET \ application. слова-константы содержат адреса целевых п/п
VOCABULARY XDEBUG \ обмен с target, отладочные\тестовые "скрипты"

\
\
ALSO MSP430 DEFINITIONS

: EQU CONSTANT ;
S" E:\vm_working\mast_tst\f235\Host\msp430x23x.f" INCLUDED


\
\
ALSO TARGET DEFINITIONS

TRUE VALUE MAP?
\ Благодарность VoidVolker. С его великодушной помощью написано следующее:
: NUMBER 0 0 2SWAP >NUMBER NIP IF 2DROP FALSE ELSE D>S TRUE THEN ;
: DO-MY CREATED BASE @ HEX NextWord NUMBER 0= THROW , BASE ! DOES> @ ;
: NOTFOUND ( a u -- )
2DUP 2>R ['] NOTFOUND CATCH
IF
2DROP MAP? IF 2R@ DO-MY ELSE -2003 THROW THEN
THEN
RDROP RDROP
;
S" E:\vm_working\mast_tst\f235\Host\app.f" INCLUDED

FALSE TO MAP?



MSP430 по сбросу и после необходимой инициализации крутится в п/п Server - ожидает 16-бит слово
и делает переход по этому адресу.

CODE
;

;
execute_: ; ( xt -- )
mov T,W
tpop
br W

;
ACK EQU 0x90

;
server:
bis.b #BIT0,&P1OUT ; LED+
call #addr
bic.b #BIT0,&P1OUT ; LED-
call #execute_
tpush
mov #ACK,T
call #char_out
jmp server
;


Всё! 07.gif
Остальным я рулю из консоли SPF4.

CODE

ALSO XDEBUG DEFINITIONS

\ *********************************************************
\ работа с целевым процессором
\

0x90 VALUE ACK \ подтверждение от target device

: ok? ( c -- ) CommIn DUP ACK = NOT IF CR ." target no ACK,received=" SPACE . ABORT ELSE DROP THEN ;

: c>t ( c -- ) \ переслать байт, принять эхо, сравнить
DUP CommOut CommIn 2DUP
= NOT IF CR . ." <-<" .
CR ." bad connection. need to reset target" ABORT
THEN 2DROP ;

: >t ( n -- ) \ переслать слово (2бйта)
DUP 0xFF AND c>t 8 RSHIFT c>t ;

: t> ( -- n ) \ принять 2байта от target device
CommIn 0xFF AND CommIn 0xFF AND 8 LSHIFT + ;

: >x >t ok? ; \ выполнить п/п в target device

: >s ( n -- ) \ положить слово на верхушку целевого стека параметров
addr >t >t ok? ;
: s> ( -- n ) \
eword >t t> ok? ;

: t! ( n a -- ) \ записать n по адресу a
DUP RAMEND > ABORT" address not valid" \ ОЗУ и периферия
SWAP >s DUP >s
0x00 0x100 WITHIN
IF cstore
ELSE store
THEN >x ;

: t@ ( a -- n ) \ прочитать содержимое a
DUP >s
0x00 0x100 WITHIN \ байт?
IF cfetch
ELSE fetch
THEN >x s> ;



Такой ( наверное довольно громоздкий ) подход позволяет не прошив ни байта кода сверх имеющегося,
прощупать каждый регистр, каждый бит HW периферии ( как на борту процессора так и вовне ),
настроить периферию на любой режим работы и выбрать оптимальный\целесообразный и только потом написать фрагмент кода ( на асме wacko.gif ) с последующим тестированием ( обязательно ). Зачастую этот процесс идет параллельно с изучением datasheet
на соответствующий периферийный модуль.
Конечно, дело не ограничивается установкой битов, чтением регистров и тд. Взможность писать форт-определения ( в SPF4 ),
реализующие какие-то более сложные алгоритмы работы target device, присутствуют в полной мере.

Ну вот, как-то так.

wink.gif
MrYuran
Цитата(chu @ Jul 9 2009, 10:12) *
Ну вот, как-то так.
wink.gif

Понятно, спасибо. Я примерно то же в CamelForth проделывал.
Сергей Борщ
Цитата(chu @ Jul 9 2009, 09:12) *
Как это работает.
Правильно ли я понял, что сам шитый код и стек формируются и существуют на хост-машине, а таргет только исполняет базовый набор примитивов?
chu
Цитата(Сергей Борщ @ Jul 9 2009, 13:58) *
Правильно ли я понял, что сам шитый код и стек формируются и существуют на хост-машине, а таргет только исполняет базовый набор примитивов?


Да, практически так и есть.

Кроме базового набора примитивов имеется также коллекция ассемблерных подпрограмм,
обслуживающих аппаратные модули контроллера.

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

Иными словами, в МК форта в чистом виде как бы и нет, но дух форта - присутствует cool.gif
В основном эксплуатируется заточенность форта для тестирования/отладки "железа".

PS. Moving Forth
MrYuran
Интересный подход...
А что если прогнать через SPF сишный листинг (см. ниже) и заставить его сделать зеркало целевой системы на писишном хосте.
CODE
1102U_430_00_00.elf: file format elf32-msp430

SYMBOL TABLE:
00001100 l d .text 00000000 .text
00000200 l d .data 00000000 .data
0000020c l d .bss 00000000 .bss
0000ffe0 l d .vectors 00000000 .vectors
00000000 l d .stab 00000000 .stab
00000000 l d .stabstr 00000000 .stabstr
00000130 l *ABS* 00000000 MPY
00000132 l *ABS* 00000000 MPYS
00000134 l *ABS* 00000000 MAC
00000136 l *ABS* 00000000 MACS
00000138 l *ABS* 00000000 OP2
0000013a l *ABS* 00000000 RESLO
0000013c l *ABS* 00000000 RESHI
0000013e l *ABS* 00000000 SUMEXT
00000020 l *ABS* 00000000 P1IN
00000021 l *ABS* 00000000 P1OUT
00000022 l *ABS* 00000000 P1DIR
00000023 l *ABS* 00000000 P1IFG
00000024 l *ABS* 00000000 P1IES
00000025 l *ABS* 00000000 P1IE
00000026 l *ABS* 00000000 P1SEL
00000028 l *ABS* 00000000 P2IN
00000029 l *ABS* 00000000 P2OUT
0000002a l *ABS* 00000000 P2DIR
0000002b l *ABS* 00000000 P2IFG
0000002c l *ABS* 00000000 P2IES
0000002d l *ABS* 00000000 P2IE
0000002e l *ABS* 00000000 P2SEL
00000018 l *ABS* 00000000 P3IN
00000019 l *ABS* 00000000 P3OUT
0000001a l *ABS* 00000000 P3DIR
0000001b l *ABS* 00000000 P3SEL
0000001c l *ABS* 00000000 P4IN
0000001d l *ABS* 00000000 P4OUT
0000001e l *ABS* 00000000 P4DIR
0000001f l *ABS* 00000000 P4SEL
00000030 l *ABS* 00000000 P5IN
00000031 l *ABS* 00000000 P5OUT
00000032 l *ABS* 00000000 P5DIR
00000033 l *ABS* 00000000 P5SEL
00000034 l *ABS* 00000000 P6IN
00000035 l *ABS* 00000000 P6OUT
00000036 l *ABS* 00000000 P6DIR
00000037 l *ABS* 00000000 P6SEL
00000070 l *ABS* 00000000 U0CTL
00000071 l *ABS* 00000000 U0TCTL
00000072 l *ABS* 00000000 U0RCTL
00000073 l *ABS* 00000000 U0MCTL
00000074 l *ABS* 00000000 U0BR0
00000075 l *ABS* 00000000 U0BR1
00000076 l *ABS* 00000000 U0RXBUF
00000077 l *ABS* 00000000 U0TXBUF
00000070 l *ABS* 00000000 UCTL
00000071 l *ABS* 00000000 UTCTL
00000072 l *ABS* 00000000 URCTL
00000073 l *ABS* 00000000 UMCTL
00000074 l *ABS* 00000000 UBR0
00000075 l *ABS* 00000000 UBR1
00000076 l *ABS* 00000000 RXBUF
00000077 l *ABS* 00000000 TXBUF
00000070 l *ABS* 00000000 UCTL0
00000071 l *ABS* 00000000 UTCTL0
00000072 l *ABS* 00000000 URCTL0
00000073 l *ABS* 00000000 UMCTL0
00000074 l *ABS* 00000000 UBR00
00000075 l *ABS* 00000000 UBR10
00000076 l *ABS* 00000000 RXBUF0
00000077 l *ABS* 00000000 TXBUF0
00000070 l *ABS* 00000000 UCTL_0
00000071 l *ABS* 00000000 UTCTL_0
00000072 l *ABS* 00000000 URCTL_0
00000073 l *ABS* 00000000 UMCTL_0
00000074 l *ABS* 00000000 UBR0_0
00000075 l *ABS* 00000000 UBR1_0
00000076 l *ABS* 00000000 RXBUF_0
00000077 l *ABS* 00000000 TXBUF_0
00000050 l *ABS* 00000000 I2CIE
00000051 l *ABS* 00000000 I2CIFG
00000052 l *ABS* 00000000 I2CNDAT
00000071 l *ABS* 00000000 I2CTCTL
00000072 l *ABS* 00000000 I2CDCTL
00000073 l *ABS* 00000000 I2CPSC
00000074 l *ABS* 00000000 I2CSCLH
00000075 l *ABS* 00000000 I2CSCLL
00000076 l *ABS* 00000000 I2CDRB
00000076 l *ABS* 00000000 I2CDRW
00000118 l *ABS* 00000000 I2COA
0000011a l *ABS* 00000000 I2CSA
0000011c l *ABS* 00000000 I2CIV
00000076 l *ABS* 00000000 I2CDR
00000078 l *ABS* 00000000 U1CTL
00000079 l *ABS* 00000000 U1TCTL
0000007a l *ABS* 00000000 U1RCTL
0000007b l *ABS* 00000000 U1MCTL
0000007c l *ABS* 00000000 U1BR0
0000007d l *ABS* 00000000 U1BR1
0000007e l *ABS* 00000000 U1RXBUF
0000007f l *ABS* 00000000 U1TXBUF
00000078 l *ABS* 00000000 UCTL1
00000079 l *ABS* 00000000 UTCTL1
0000007a l *ABS* 00000000 URCTL1
0000007b l *ABS* 00000000 UMCTL1
0000007c l *ABS* 00000000 UBR01
0000007d l *ABS* 00000000 UBR11
0000007e l *ABS* 00000000 RXBUF1
0000007f l *ABS* 00000000 TXBUF1
00000078 l *ABS* 00000000 UCTL_1
00000079 l *ABS* 00000000 UTCTL_1
0000007a l *ABS* 00000000 URCTL_1
0000007b l *ABS* 00000000 UMCTL_1
0000007c l *ABS* 00000000 UBR0_1
0000007d l *ABS* 00000000 UBR1_1
0000007e l *ABS* 00000000 RXBUF_1
0000007f l *ABS* 00000000 TXBUF_1
00000055 l *ABS* 00000000 SVSCTL
00000128 l *ABS* 00000000 FCTL1
0000012a l *ABS* 00000000 FCTL2
0000012c l *ABS* 00000000 FCTL3
00000059 l *ABS* 00000000 CACTL1
0000005a l *ABS* 00000000 CACTL2
0000005b l *ABS* 00000000 CAPD
0000012e l *ABS* 00000000 TA0IV
00000160 l *ABS* 00000000 TA0CTL
00000170 l *ABS* 00000000 TA0R
00000162 l *ABS* 00000000 TA0CCTL0
00000164 l *ABS* 00000000 TA0CCTL1
00000172 l *ABS* 00000000 TA0CCR0
00000174 l *ABS* 00000000 TA0CCR1
00000166 l *ABS* 00000000 TA0CCTL2
00000176 l *ABS* 00000000 TA0CCR2
0000011e l *ABS* 00000000 TBIV
00000180 l *ABS* 00000000 TBCTL
00000190 l *ABS* 00000000 TBR
00000182 l *ABS* 00000000 TBCCTL0
00000184 l *ABS* 00000000 TBCCTL1
00000186 l *ABS* 00000000 TBCCTL2
00000192 l *ABS* 00000000 TBCCR0
00000194 l *ABS* 00000000 TBCCR1
00000196 l *ABS* 00000000 TBCCR2
00000188 l *ABS* 00000000 TBCCTL3
0000018a l *ABS* 00000000 TBCCTL4
0000018c l *ABS* 00000000 TBCCTL5
0000018e l *ABS* 00000000 TBCCTL6
00000198 l *ABS* 00000000 TBCCR3
0000019a l *ABS* 00000000 TBCCR4
0000019c l *ABS* 00000000 TBCCR5
0000019e l *ABS* 00000000 TBCCR6
00000056 l *ABS* 00000000 DCOCTL
00000057 l *ABS* 00000000 BCSCTL1
00000058 l *ABS* 00000000 BCSCTL2
000001a0 l *ABS* 00000000 ADC12CTL0
000001a2 l *ABS* 00000000 ADC12CTL1
000001a4 l *ABS* 00000000 ADC12IFG
000001a6 l *ABS* 00000000 ADC12IE
000001a8 l *ABS* 00000000 ADC12IV
00000140 l *ABS* 00000000 ADC12MEM0
00000142 l *ABS* 00000000 ADC12MEM1
00000144 l *ABS* 00000000 ADC12MEM2
00000146 l *ABS* 00000000 ADC12MEM3
00000148 l *ABS* 00000000 ADC12MEM4
0000014a l *ABS* 00000000 ADC12MEM5
0000014c l *ABS* 00000000 ADC12MEM6
0000014e l *ABS* 00000000 ADC12MEM7
00000150 l *ABS* 00000000 ADC12MEM8
00000152 l *ABS* 00000000 ADC12MEM9
00000154 l *ABS* 00000000 ADC12MEM10
00000156 l *ABS* 00000000 ADC12MEM11
00000158 l *ABS* 00000000 ADC12MEM12
0000015a l *ABS* 00000000 ADC12MEM13
0000015c l *ABS* 00000000 ADC12MEM14
0000015e l *ABS* 00000000 ADC12MEM15
00000080 l *ABS* 00000000 ADC12MCTL0
00000081 l *ABS* 00000000 ADC12MCTL1
00000082 l *ABS* 00000000 ADC12MCTL2
00000083 l *ABS* 00000000 ADC12MCTL3
00000084 l *ABS* 00000000 ADC12MCTL4
00000085 l *ABS* 00000000 ADC12MCTL5
00000086 l *ABS* 00000000 ADC12MCTL6
00000087 l *ABS* 00000000 ADC12MCTL7
00000088 l *ABS* 00000000 ADC12MCTL8
00000089 l *ABS* 00000000 ADC12MCTL9
0000008a l *ABS* 00000000 ADC12MCTL10
0000008b l *ABS* 00000000 ADC12MCTL11
0000008c l *ABS* 00000000 ADC12MCTL12
0000008d l *ABS* 00000000 ADC12MCTL13
0000008e l *ABS* 00000000 ADC12MCTL14
0000008f l *ABS* 00000000 ADC12MCTL15
000001c0 l *ABS* 00000000 DAC12_0CTL
000001c2 l *ABS* 00000000 DAC12_1CTL
000001c8 l *ABS* 00000000 DAC12_0DAT
000001ca l *ABS* 00000000 DAC12_1DAT
00000122 l *ABS* 00000000 DMACTL0
00000124 l *ABS* 00000000 DMACTL1
000001e0 l *ABS* 00000000 DMA0CTL
000001e2 l *ABS* 00000000 DMA0SA
000001e4 l *ABS* 00000000 DMA0DA
000001e6 l *ABS* 00000000 DMA0SZ
000001e8 l *ABS* 00000000 DMA1CTL
000001ea l *ABS* 00000000 DMA1SA
000001ec l *ABS* 00000000 DMA1DA
000001ee l *ABS* 00000000 DMA1SZ
000001f0 l *ABS* 00000000 DMA2CTL
000001f2 l *ABS* 00000000 DMA2SA
000001f4 l *ABS* 00000000 DMA2DA
000001f6 l *ABS* 00000000 DMA2SZ
00000120 l *ABS* 00000000 WDTCTL
00000000 l *ABS* 00000000 IE1
00000002 l *ABS* 00000000 IFG1
00000001 l *ABS* 00000000 IE2
00000003 l *ABS* 00000000 IFG2
00000004 l *ABS* 00000000 ME1
00000005 l *ABS* 00000000 ME2
00000000 l df *ABS* 00000000 gen.c
00000130 l *ABS* 00000000 __MPY
00000132 l *ABS* 00000000 __MPYS
00000134 l *ABS* 00000000 __MAC
00000136 l *ABS* 00000000 __MACS
00000138 l *ABS* 00000000 __OP2
0000013a l *ABS* 00000000 __RESLO
0000013c l *ABS* 00000000 __RESHI
0000013e l *ABS* 00000000 __SUMEXT
00001132 l O .text 00000040 SinTableData
00000000 l df *ABS* 00000000 dco.c
00000130 l *ABS* 00000000 __MPY
00000132 l *ABS* 00000000 __MPYS
00000134 l *ABS* 00000000 __MAC
00000136 l *ABS* 00000000 __MACS
00000138 l *ABS* 00000000 __OP2
0000013a l *ABS* 00000000 __RESLO
0000013c l *ABS* 00000000 __RESHI
0000013e l *ABS* 00000000 __SUMEXT
00000202 l O .data 00000002 Last_TB_Tkts
00000204 l O .data 00000002 LastTBR
00000206 l O .data 00000002 DeltaTBR
00000208 l O .data 00000001 NeedToCalibrateDCO
00000000 l df *ABS* 00000000 main.c
00000130 l *ABS* 00000000 __MPY
00000132 l *ABS* 00000000 __MPYS
00000134 l *ABS* 00000000 __MAC
00000136 l *ABS* 00000000 __MACS
00000138 l *ABS* 00000000 __OP2
0000013a l *ABS* 00000000 __RESLO
0000013c l *ABS* 00000000 __RESHI
0000013e l *ABS* 00000000 __SUMEXT
00000000 l df *ABS* 00000000 measure.c
00000130 l *ABS* 00000000 __MPY
00000132 l *ABS* 00000000 __MPYS
00000134 l *ABS* 00000000 __MAC
00000136 l *ABS* 00000000 __MACS
00000138 l *ABS* 00000000 __OP2
0000013a l *ABS* 00000000 __RESLO
0000013c l *ABS* 00000000 __RESHI
0000013e l *ABS* 00000000 __SUMEXT
00000000 l df *ABS* 00000000 utils.c
00000130 l *ABS* 00000000 __MPY
00000132 l *ABS* 00000000 __MPYS
00000134 l *ABS* 00000000 __MAC
00000136 l *ABS* 00000000 __MACS
00000138 l *ABS* 00000000 __OP2
0000013a l *ABS* 00000000 __RESLO
0000013c l *ABS* 00000000 __RESHI
0000013e l *ABS* 00000000 __SUMEXT
00000000 l df *ABS* 00000000 TimerB.c
00000130 l *ABS* 00000000 __MPY
00000132 l *ABS* 00000000 __MPYS
00000134 l *ABS* 00000000 __MAC
00000136 l *ABS* 00000000 __MACS
00000138 l *ABS* 00000000 __OP2
0000013a l *ABS* 00000000 __RESLO
0000013c l *ABS* 00000000 __RESHI
0000013e l *ABS* 00000000 __SUMEXT
0000020a l O .data 00000002 uiMainInterval
0000020c l .bss 00000000 ulRealTime
00000000 l df *ABS* 00000000 AD7708.c
00000130 l *ABS* 00000000 __MPY
00000132 l *ABS* 00000000 __MPYS
00000134 l *ABS* 00000000 __MAC
00000136 l *ABS* 00000000 __MACS
00000138 l *ABS* 00000000 __OP2
0000013a l *ABS* 00000000 __RESLO
0000013c l *ABS* 00000000 __RESHI
0000013e l *ABS* 00000000 __SUMEXT
00001696 l F .text 0000004c WriteByte
000016e2 l F .text 00000036 ReadByte
00001718 l F .text 00000030 ReadWord
00000000 l df *ABS* 00000000 libgcc2.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
00000000 l df *ABS* 00000000 fp-bit.c
0000000c g *ABS* 00000000 __data_size
00001540 g F .text 000000d8 Init_7708
00001686 g F .text 00000010 StartContConversion
00001172 g F .text 0000002c Timerb_ccr1
000014b8 g F .text 00000088 GenInit
000002b4 g O .bss 00000008 ADC
00000210 g O .bss 00000002 eStatus
000002bc g O .bss 0000000c Urt
00001748 g .text 00000000 __udivmodhi4
00000200 g O .data 00000002 TB_Tkts_In_ms
00001790 g .text 00000000 _etext
0000030e g O .bss 0000000c Timers
00000128 g *ABS* 00000000 __bss_size
0000178e w .text 00000000 __stop_progExec__
0000112c g .text 00000000 _unexpected_1_
0000146a g .text 00000000 vector_ffe0
000002c8 g O .bss 0000000c Xslow
000012ec g F .text 00000044 ADC_ZeroCal
000013fa g F .text 0000000a Pause
00001330 g F .text 00000094 ADC_FullCal
00001404 g F .text 0000000e InitWatchDogPort
0000031a g O .bss 0000001a tempFlashData
0000119e g F .text 00000078 CalibrateDCO
00001468 g .text 00000000 vector_ffec
0000112c w .text 00000000 vector_fff0
00001790 g *ABS* 00000000 __data_load_start
0000112c g .text 00000000 __dtors_end
0000112c w .text 00000000 vector_fffc
000002d4 g O .bss 00000003 UsingChannelFlag
000002d8 g O .bss 00000012 T
0000112c w .text 00000000 vector_ffe4
00001644 g F .text 00000042 Calibrate
000002ea g O .bss 0000000c Urcab
00000212 g O .bss 00000004 RealTime
0000ffe0 g O .vectors 00000020 InterruptVectors
00001118 w .text 00000000 __do_clear_bss
0000142c g F .text 00000014 TimerBInit
00001618 g F .text 0000002c ReadRegister
0000112c w .text 00000000 vector_ffe2
0000112c w .text 00000000 vector_ffe8
00001130 w .text 00000000 _unexpected_
000002f6 g O .bss 0000000c Xfast
0000141c g .text 00000000 vector_fffa
00001216 g F .text 0000002a SetDCO
00001478 g F .text 00000040 SetGenFreq
00001100 w .text 00000000 _reset_vector__
0000112c g .text 00000000 __ctors_start
0000146a g F .text 0000000e DMA_isr
00001106 w .text 00000000 __do_copy_data
0000020c g .bss 00000000 __bss_start
0000112c w .text 00000000 vector_ffee
0000112c w .text 00000000 vector_fff4
00001240 g F .text 000000ac main
00001172 g .text 00000000 vector_fff8
0000112c w .text 00000000 vector_fff2
00010000 g .vectors 00000000 _vectors_end
0000112c w .text 00000000 vector_ffe6
00000302 g O .bss 0000000c Uref
0000112c g .text 00000000 __dtors_start
0000112c g .text 00000000 __ctors_end
00000a00 g *ABS* 00000000 __stack
000013c4 g F .text 00000002 PrepareBuffers
0000141c g F .text 00000010 Timerb_ccr0
0000020c g .data 00000000 _edata
00000334 g .bss 00000000 _end
00001440 g F .text 00000028 GetRealTime
000013c6 g F .text 00000034 ADC_StartUp
00001764 g .text 00000000 __udivmodsi4
0000112c w .text 00000000 vector_fff6
00000216 g O .bss 00000066 usRegInputBuf
0000027c g O .bss 00000038 usRegHoldingBuf
00001100 w .text 00000000 __low_level_init
00001128 w .text 00000000 __jump_to_main
00000200 g .data 00000000 __data_start
0000112c w .text 00000000 vector_ffea
00001412 g F .text 0000000a ClearWatchDog
00001468 g F .text 00000002 TA0_isr

То есть, например, на входе имеем
00001216 g F .text 0000002a SetDCO
00001478 g F .text 00000040 SetGenFreq
А на выходе:
: SetDCO 1216 CALL ;
: SetGenFreq 1478 CALL ;

Просьба модераторам:
Перенесите, пожалуйста, обсуждение начиная с поста №4
в тему про форт, ибо есть желание продолжить, а тут не совсем к месту
chu
Цитата(Сергей Борщ @ Jul 9 2009, 13:58) *
Правильно ли я понял, что сам шитый код и стек формируются и существуют на хост-машине, а таргет только исполняет базовый набор примитивов?


Виноват, был невнимателен. Прошу прощения.

Стек параметров в target присутствует .

Цитата(MrYuran @ Jul 9 2009, 15:47) *
Интересный подход...


Не уверен в удовлетворительном результате.
Заковыристая заковыка зарыта в передаче параметров С-функциям компилятором.
В случае с ассемблером - все проще: я сам организовываю передачу параметров п/программам
( через стек параметров ). Собственно это и есть виртуальная форт-машина.
MrYuran
Цитата(chu @ Jul 9 2009, 13:31) *
Заковыристая заковыка зарыта в передаче параметров С-функциям компилятором.
В случае с ассемблером - все проще: я сам организовываю передачу параметров п/программам

НУ ладно. Оставим пока функции. Но переменные и регистры запросто можно проиндексировать.
Хотя и с функциями тоже не так всё сложно.
У меня например, обычно большинство функций типа viod(void), параметры модулей хранятся в локальных static-переменных.
rezident
Цитата(MrYuran @ Jul 9 2009, 14:47) *
Просьба модераторам:
Перенесите, пожалуйста, обсуждение начиная с поста №4
в тему про форт, ибо есть желание продолжить, а тут не совсем к месту
Темы разделил, но объединить с указанной не могу. Не хватает полномочий. Обратитесь с этой просьбой к супермодераторам.
Kopa
Цитата(Сергей Борщ @ Jul 9 2009, 10:58) *
Правильно ли я понял, что сам шитый код и стек формируются и существуют на хост-машине, а таргет только исполняет базовый набор примитивов?


Шитого кода может и не существоватьsmile.gif ( зависит от реализации Форта на хост машине )

При описанной схеме, предположу что, стек существует в таргете
и скорее всего , при необходимости, передаётся отдельными примитивами на хост.
( или управлятся командами чтения/записи ячеек памяти с хост машины )

При отладке слова управляющие конструкции такие как IF, WHILE ... лучше не исполнять в таргете,
а симулировать псевдо-исполнение в хосте. ( примерно такая схема принята в ff303 при исполнении байт-кода)


P.S. Оставлять ли топик в данной ветке или присоединить к существующему обсуждению Форт тематики
в разделе "Все остальные контроллеры" на усмотрение модераторов.
IgorKossak
Цитата(rezident @ Jul 9 2009, 13:56) *
Темы разделил, но объединить с указанной не могу. Не хватает полномочий. Обратитесь с этой просьбой к супермодераторам.

Объединил, полномочий хватило rolleyes.gif
chu
Цитата(RodionGork @ Apr 16 2009, 12:55) *
А какие нынче контроллеры есть со встроенным FORTH или же компилятором FORTH удачным?


Amforth is a Forth system for the AVR ATmega microcontroller family. It works on the controller itself and does not depend on any additional hard- or software. amforth can be downloaded from the http://sourceforge.net/projects/amforth/files/ занимает менее 8К Flash, около 50 байт EEPROM и 100-150 байт RAM. последняя версия 2010-07-01
Kopa
Цитата(chu @ Jul 9 2010, 18:41) *
Amforth

В оживление темыsm.gif от chu
amForth 4.2 + AVR ATmega32 + шаговые двигатели
http://roboforum.ru/forum58/topic4406-60.html
Kopa
А подниму ка я ещё раз данный топикsm.gif

Созданы ещё пара любительских Форт систем для AVR
Очередной AVRForth система кросс компиляции из Linux|Windows
Форт-система для смарт-карт AtMega163+24c256
4
P.S. Авось не даром.

Из недавних ещё можно отметить Retro Forth для Arduino (avr mega 328p)
А как же без фотографий?
плата 1 https://plus.google.com/photos/114372642424...541341335572530
плата 2 https://lh6.googleusercontent.com/-26T-MEsq...73/2012%2B-%2B1

от from Oleksandr Kozachuk

Попытка создать на базе Форт синтаксиса и семантики графическую (с иконками) табличную среду быстрой разработки программ (почти плиточный интерфейс) Thyrd в разработке применён язык TCL/TK (текущая версия 0.3) и возможно с хорошими перспективами.
polyname
а нет ли форта на чистом С, независимого от архитектуры ?
с компиляцией на лету, то есть с возможностью обработки строк, компиляции их в псевдо-код или в шитый код, и выполнения
Kopa
Цитата(polyname @ Sep 18 2012, 17:13) *
а нет ли форта на чистом С, независимого от архитектуры ?
с компиляцией на лету, то есть с возможностью обработки строк, компиляции их в псевдо-код или в шитый код, и выполнения

На чистом С есть разные реализации и в разных вариантахsm.gif

Универсальный рецепт, сразу сложно определить, т.к. схемы конкретных реализаций Форт языка разнообразны и выбираются
из предпочтений разработчика. Будет ли Форт следовать существующим "отраслевым" разновидностям стандарта или Форт подобным
или это будет "свой" Форт или другой конкатинавный (цепочечный) язык. Для Форта нет ограничений на возможные реализации
парадигм программирования (всё зависит от воли и разума разработчика и возможности использования существующих решений, по необходимости)

P.S. Изучение материалов Рускоязычного Форт форума может прояснить многие вопросы.
Там же можно найти конкретные ссылки и задать необходимые вопросы.
(хорошо заданный вопрос получается если половина вопроса уже известнаsm.gif
Это всё написано не для "восхволения" Форт подхода, а чтоб обрисовать общую картину т.к. сам по себе Форт подход и программирование
основывается на определённой системной архитектуре (часто определяемой как FVM Форт виртуальной машине) в основе построения
которой заложены несколько ключевых составляющих. Этим Форт так и привлекает к созданию и использованию своих "предпочтений"
Если начнёте "погружение" в данной тематике, то желаю чтобы оно не "поглотило" сознание и осталось время для других интересных вещей.
Форт тематика интересна, но существует на "задворках" местного форума и почти не обсуждается. Похоже все и так "сыты" и "довольны"
polyname
Цитата
или это будет "свой" Форт или другой конкатинавный (цепочечный) язык
думал над приближением синтаксиса к конечному юзеру, нужно что-то ближе с интерпретируемому С и Басику. Как минимум хочется сделать человеческий вызов функций (имя парам1 парам2 ...). В принципе перевернуть перед компиляцией - не проблема.
Цитата
основывается на определённой системной архитектуре
вот этого не нужно, хочется сделать на чистом С, без платформо-зависимых выкрутасов. Быстродействие не критично.
Должно работать как минимум на AVR и STM32
Kopa
Цитата(polyname @ Sep 18 2012, 23:47) *
думал над приближением синтаксиса к конечному юзеру, нужно что-то ближе с интерпретируемому С и Басику. Как минимум хочется сделать человеческий вызов функций (имя парам1 парам2 ...). В принципе перевернуть перед компиляцией - не проблема.

Да, пользователю желательно дать разные варианты. Хотя в общем рассмотрении проще синтаксиса и мощнее (комбинаторно) чем у Форта (цепочечных языков) вряд ли придумаешь (слово полиморфно и может использоваться в разных контекстах т.к. не использует передаваемые именованные параметры, хотя и может использовать имеющеюся возможность). Да и забыть правила или операторы Форт языка гораздо сложнее. (т.к. всё последовательно и "единобезобразно") Форт систему можно "расширять" динамически (дополнять, подменять, переопределять или удалять ресурсы Форт системы) до синтаксиса подходящего языка и при этом производить минимальный синтаксиеский разбор входного текста. (ввести в использование префиксные if( else( и др. слова ) Показателен, в этом аспекте, переложенный на Форт язык материал популярного "эссе" Креншоу "Давайте сделаем компилятор".
Есть и отдельные разработанные на Форте (GForth) библиотеки BNF, EBNF разбора. Несложно расширить, в рантайме, и введением формы обычных математически выражений и если необходимо добавить объектное расширение заданной функциональности. Имеются и наработанные математические библиотеки разных алгоритмов.

Цитата(polyname @ Sep 18 2012, 23:47) *
вот этого не нужно, хочется сделать на чистом С, без платформо-зависимых выкрутасов. Быстродействие не критично.
Должно работать как минимум на AVR и STM32

Подразумевалось немного другое - элементы внутреннего устройства Форт системы.

P.S. Делать на чистом С не принципиально т.к. создание или доработка под себя существующих Форт систем (для разных контроллеров - коих достаточно) не такое уж и обременительное занятие, если не пытаться "выжать" производительность. Есть и без привлечния или минимального использования ассемблера "самораскручиваемые" разработки. Форт также, бывает, имплантируют в существующие готовые разные инструментарии и программы.

Р.S. Перечислять здесь существующие сделанные варианты, например на С, не имеет особого смысла т.к. их много и разных. Если только сделать, по возможности, краткий обзор и некоторые рекомендации при проблеме начального понимания. Но при знакомстве с Форт уровень начального понимания не сильно затруднителен.
(ообенно при чтении, хотя и в чём то устаревших, но описывающих суть Форт языка книг.) Уровень вхождения в Форт существует и не всем этот язык "показан"
(может быть отторжение т.к. имеет много отличий от Си подобных языков, хотя и ровесник Си и мало изменился в сути с того времени, в частности при знакомстве с широко используемыми стеками в языке и необходимости с ними уметь обращаться)

На этом пока всё. (надо и поспать перед работой)
polyname
еще вопросик - какой наиболее эффективный метод организации стека данных для хранения чисел разной разрядности, строк, ссылок на функции и т.д. ?
Kopa
Цитата(polyname @ Sep 19 2012, 14:25) *
еще вопросик - какой наиболее эффективный метод организации стека данных для хранения чисел разной разрядности, строк, ссылок на функции и т.д. ?

Типичная организация стека в Форт системах через регистр указатель на ячейки одинаковой размерности (16, 32, 64 ... бит - в ячейке может хранится как числа
так и указатели на строки, 2-е стековых ячейки уже представляют число двойной разрядности), при этом для повышения эффективности кода,
обычно верхний элемент стека данных (TOS) располагается в регистре общего назначения контроллера, а указатель стека определяет место хранения 2-го
элемента стека. При поддержке "плавучки" для неё тоже обычно выделяется отдельный стек с необходимой разрядностью элементов. Стек возвратов
(адреса вызываемых слов и временное хранение одного,двух элементов данных) обычно разрядности адреса используемого контроллера или реализуемой FVM.

P.S. Какие структуры для компилятора С, например, эффективны в поддержке можно посмотреть по имеющимся реализациям Форт системам и как ускоряется код написанный на С (например в GFORTH) и как этому способствует конкретный компилятор. Можно даже в скомпилированном коде предусмотреть слой оптимизации потока транслируемой программы (например peephole) или использовать технологии JIT ускорения кода.

Для представления о компактности кода ядра Форт системы можно привести такой пример. Реализация российской Форт системы SPF4 для Windows занимает порядка 60-70кб "чистого" процессорного кода x86 архитектуры (c хорошей поддержкой операционки), при этом больше половины этого объёма - макрооптимизатор машинного кода получаемого при трансляции Форт программы в x86 архитектуру и измеренные показатели скорости на тестовых задачах сравнимы с комерческими Форт системами VFX, iForth, SwiftForth (уступает первым двум.) и намного опережает другие открытые (свободные) Форт системы (GForth, BigForth, Win32Forth, kForth, FICL и др.) для PC и не кардинально уступает коду С компиляторов.
benchmark
Код
******************************************
Core i7 3.4GHz, 8Gb RAM, Windows 7-64, SP1
******************************************

12 May 2012
===========
VFX        VFX Forth for Windows v4.60 [build 3332]
SF3        SwiftForth i386-Win32 3.4.2 11-Feb-2012
iForth       version 4.0.400, generated December 31, 2010.
SP-Forth   Version 4.20 Build 001 at 21.Jan.2009
W32FS      Win32Forth-STC version: 0.05.01 build: 273
gff        gforth-fast 0.7.0

All with no specifics and no hackery

Test time including overhead (ms)         VFX  iForth     SF3    SPF4   W32FS     gff
DO LOOP                                     4       0       4       0      16       0
+                                           5       0       4       0       0       0
M+                                          4       0       5      15      16       0
*                                           5       0       5       0       0      16
/                                           7       0       3       0      15       0
M*                                          4       0       2       0       0       0
M/                                          4       0       3      16       0      15
/MOD                                        3       0       4       0       0       0
*/                                          4      16       4       0      16      16
ARRAY fill                                  2       0       9       0       0       0
================================================================================
====
Total:                                     42      16      43      31      63      47

Win32 API: SendMessage                      5       0       2       0       0       0
Win32 API: COUNTER                         36       0      20       0       0     218
System I/O: KEY?                            7       0     112     359     359     765
================================================================================
====
Total:                                     48       0     134     359     359     983

Eratosthenes sieve 1899 Primes             43      47      64      47     109     171
Fibonacci recursion ( 35 -> 9227465 )      44     109      43      62      47     234
Hoare's quick sort (reverse order)         38      47      80      47      93     203
Generate random numbers (1024 kb array)    55      62      78      63      78     172
LZ77 Comp. (400 kb Random Data Mem>Mem)    65      78     306      93     109     249
Dhrystone (integer)                        38      32      96      47      78     156
================================================================================
====
Total:                                    283     375     667     359     514    1105
Time (ratio to VFX):                     1.00    1.32    2.36    1.27    1.82    3.90
Kopa
И что?
Никто и ничего не сделал с применением Форт пока топик был предан забвению? sm.gif
mantech
Цитата(Kopa @ Jan 4 2016, 15:28) *
И что?
Никто и ничего не сделал с применением Форт пока топик был предан забвению? sm.gif


А смысл? Процентов 90 кодит на сях rolleyes.gif
chu
Цитата(mantech @ Jan 13 2016, 20:44) *
А смысл? Процентов 90 кодит на сях rolleyes.gif


Forth великолепен в исследованиях, изучении, поиске решения.
То, что называется "design iterations" гораздо (в разы, как минимум)
эффективнее чем Ваши пресловутые "Процентов 90...".
Так как:
1. быстрее \ цикл "компиляция-прошивка-проверка"
2. качественнее \ интерактивное тестирование создаваемого кода
3. дешевле \ время+ограниченный ресурс "записи/стирания" флеша

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

Конечно на производстве, где "поток и массовость", смысла применять форт наверное нет.
Но, те "Процентов 90...", не занятые на производстве, постоянно вопиют на различных форумах
"Где взять библиотеки??!", "Поделитесь скетчем!!"... уныло.

ПыСы. Это как сравнивать композитора
и духовой оркестр парка культуры и отдыха им. "90%" 1111493779.gif
chu
Цитата(chu @ Jan 19 2016, 13:49) *
цикл "компиляция-прошивка-проверка"

самое важное упустил "-редактирование"
mantech
Цитата(chu @ Jan 19 2016, 09:49) *
Forth великолепен в исследованиях, изучении, поиске решения.

Конечно на производстве, где "поток и массовость", смысла применять форт наверное нет.


На вкус и цвет, конечно, фломастеры разные, сам этот язык не изучал, но почему тогда повсеместно изучают паскаль и си, даже бейсик, а вот про форт не слыхал?? Учился в политехе 1995-2001 год, везде был паскаль...
chu
Цитата(mantech @ Jan 21 2016, 02:25) *
а вот про форт не слыхал??

Просвещайтесь: Язык Форт в СССР и России

И вот, почитайте на досуге язык и философия для решения задач .
Думаю, будет полезно безотносительно к форту. Это НЕ учебник.
chu
В конце https://en.wikipedia.org/wiki/Forth_(programming_language) есть любопытная и довольно редкая ссылка NASA applications of Forth (original NASA server no longer running, copy from archive.org)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.