Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср сен 18, 2019 22:12

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - amForth v3.4 Как забыть слово или все слова?
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
Kopa писал(а):
iv_ru писал(а):
Блин, как всё просто-то... только слова этого "marker" нет...


Слово есть, но не в ядре и расположено lib\ans94\marker.frt



Небольшой итог:

"FORGET" работает теперь так как я и предпологал: тихо-мирно и самое главное правильно.

Спасибо всем большое за помощь, особенно: Kopе

П.С. если кому интересно, то надо было в AVR Studio в файле "dict_minimum.inc" добавить .include "words/set-current.asm", потом определить слово как в amforth-3.4\lib\ans94\marker.frt
и всё.
тест:
Код:
marker startdict
: newWord 1ms ;
words
\ newWord определено и показывается
startdict
words
\нет такого слова: newWord

:D
Сообщение Добавлено: Пт июн 26, 2009 12:35
  Заголовок сообщения:   Ответить с цитатой
iv_ru писал(а):
Блин, как всё просто-то... только слова этого "marker" нет...


Слово есть, но не в ядре и расположено lib\ans94\marker.frt
Определено так:
Код:
\ defines a word which resets the dictionary when called
\ better then forget but has still limitations


: marker ( c<chars> -- )
    get-order
    get-current dup e@
    here
    edp 
    heap
    \ maybe save turnkey as well
    create
    , , , , ,
    \ for save the search order wordlists
    dup ,
    0 ?do
   dup ,
   e@  ,
    loop
    does>
       dup i@ to heap
    1+ dup i@ to edp
    1+ dup i@ to here
    1+ dup i@ swap 1+ dup i@ swap >r
    swap over e! set-current
    r>
    1+ dup i@ \ # of entries in search order
       dup >r
       0 ?do
        1+ dup i@
   swap 1+ dup i@ over e!
       loop
    drop
    r> set-order
;
Сообщение Добавлено: Пт июн 26, 2009 07:20
  Заголовок сообщения:   Ответить с цитатой
Anonymous писал(а):
iv_ru писал(а):
Ну так всё-же как мне это сделать-то? Я, чесно говоря, пока понятия не имею...


MARKER работает как необходимо?


Нет, не работает, да и слова такого нет, хотя по совету из Рассылки обновился до версии 3.4.
Там же в Рассылке посоветовали :
Код:
words
marker qux
words
qux
words

Блин, как всё просто-то... только слова этого "marker" нет...
Сообщение Добавлено: Чт июн 25, 2009 19:05
  Заголовок сообщения:   Ответить с цитатой
iv_ru писал(а):
Ну так всё-же как мне это сделать-то? Я, чесно говоря, пока понятия не имею...


MARKER работает как необходимо?
Сообщение Добавлено: Чт июн 25, 2009 08:26
  Заголовок сообщения:   Ответить с цитатой
Цитата:
Ну так всё-же как мне это сделать-то? Я, чесно говоря, пока понятия не имею...


если вводите несколько вариантов одного слова друг за другом можно как-то так делать:

Код:
VARIABLE LHERE
VARIABLE LCURR
: W[ HERE LHERE ! CURRENT @ @ LCURR ! ;
: ]W LHERE @ DP ! LCURR @ CURRENT @ ! ;

и пример использования
W[
: S DUP ;   1  S
: S DROP ;  2 3 S
]W
: S DUP SWAP ;   4 S
первые два варианта неудачные, а последний нормальный, например,
он только и попадет в словарь.
Сообщение Добавлено: Ср июн 24, 2009 15:46
  Заголовок сообщения:   Ответить с цитатой
iv_ru писал(а):
Ну так всё-же как мне это сделать-то? Я, чесно говоря, пока понятия не имею...


Сначала посмотреть по этому вопросу книгу Баранова, а дальше отталкиваться
от реализации и возможности amForth попутно ознакамливаясь со стандартом
на Forth 94г.

P.S. или ждать пока кто нибудь из фортёров не скажет или предложит
реализацию как это сделать для amForth:)
Можно ещё завести переписку с автором по добавлению требуемой функциональности.
amForth Devel
ivan.rudenok задал вопрос про Forget ( Ваш? )
Ещё в forth.cz пользуются amForth ( добавили ассемблер и примеры с индикатором )
Утилита трансляции frt файлов frt -> asm AVRA
для amForth ( запускается с использованием gforth )

Пользователи amForth ( clustrМaps) c большим отрывом в Германии.
Сообщение Добавлено: Ср июн 24, 2009 13:11
  Заголовок сообщения:   Ответить с цитатой
Ну так всё-же как мне это сделать-то? Я, чесно говоря, пока понятия не имею...
Сообщение Добавлено: Ср июн 24, 2009 12:46
  Заголовок сообщения:   Ответить с цитатой
iv_ru писал(а):
Kopa писал(а):
iv_ru писал(а):
нет таких слов: CONTEXT и CURRENT, есть только эти:
http://amforth.sourceforge.net/words/


Есть GET-CURRENT SET-CURRENT про другие не понятно,
и непривычно смотреть Форт текст в виде ссылок DW:)


Ну помоему, если я конечно всё правильно понял, то этими командами (GET-CURRENT SET-CURRENT) можно подключать/отключать словари, но при этом словари всегда находятся в системе.


Прежде всего, чтобы при реализации Forget ссылка на словарь не осталась в цепочке
последнего для добавления. ( например если мы затираем данные во Flash ) Можно организовать последним пользовательский словарь и его удалять из системы ( из процедуры поиска и скорректировав
HERE и при необходимости стереть ERASE область после HERE )
Слово ORDER показывает набор словарей для поиска ( CONTEXT ) и добавления ( CURRENT).
Сообщение Добавлено: Вт июн 23, 2009 16:30
  Заголовок сообщения:   Ответить с цитатой
Kopa писал(а):
iv_ru писал(а):
нет таких слов: CONTEXT и CURRENT, есть только эти:
http://amforth.sourceforge.net/words/


Есть GET-CURRENT SET-CURRENT про другие не понятно,
и непривычно смотреть Форт текст в виде ссылок DW:)


Ну помоему, если я конечно всё правильно понял, то этими командами (GET-CURRENT SET-CURRENT) можно подключать/отключать словари, но при этом словари всегда находятся в системе.
Сообщение Добавлено: Вт июн 23, 2009 16:13
  Заголовок сообщения:   Ответить с цитатой
iv_ru писал(а):
нет таких слов: CONTEXT и CURRENT, есть только эти:
http://amforth.sourceforge.net/words/


Есть GET-CURRENT SET-CURRENT про другие не понятно,
и непривычно смотреть Форт текст в виде ссылок DW:)
Сообщение Добавлено: Вт июн 23, 2009 16:02
  Заголовок сообщения:   Ответить с цитатой
Kopa писал(а):
iv_ru писал(а):
Forth в ней будет в качестве вызываемого модуля в добавок к firmware, но это уже не моя головная боль :D )
...


т.е. роль интерфеса к существующей железячной плате и возможно ещё одной:)

P.S. Лучше о "головной боли" пользователя подумать заранее, чтобы не было
чего нехорошего.
>mark и >resolve - это немного не то. Ближе к этому процессу слова CONTEXT и CURRENT

но HERE конечно тоже необходимо восстановить.


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


нет таких слов: CONTEXT и CURRENT, есть только эти:
http://amforth.sourceforge.net/words/
Сообщение Добавлено: Вт июн 23, 2009 15:32
  Заголовок сообщения:   Ответить с цитатой
iv_ru писал(а):
Forth в ней будет в качестве вызываемого модуля в добавок к firmware, но это уже не моя головная боль :D )
...


т.е. роль интерфеса к существующей железячной плате и возможно ещё одной:)

P.S. Лучше о "головной боли" пользователя подумать заранее, чтобы не было
чего нехорошего.
>mark и >resolve - это немного не то. Ближе к этому процессу слова CONTEXT и CURRENT

но HERE конечно тоже необходимо восстановить.
Сообщение Добавлено: Вт июн 23, 2009 15:16
  Заголовок сообщения:   Ответить с цитатой
iv_ru писал(а):
.s печатает весь стек, что не всегда удобно...

но зато можно глянуть, как он сделан в конкретной системе, и отображать меньшее кол-во элементов. Потому как перечисленные выше варианты выглядят грубовато :)

iv_ru писал(а):
Мне необходимо что-б я свои слова из системы мог удалить, не перезаливая всю эту систему заново (Forth в ней будет в качестве вызываемого модуля в добавок к firmware, но это уже не моя головная боль )

надо смотреть, как устроен словарь в форт-системе (конкретной форт-системе)
и могут быть отличия для распределенной системы (где словарь может быть на host-e а код на микроконтроллере)

вобщем, в любом случае придется разбираться в том, как устроен словарь в конкретной системе, и как его можно корректно откатить...
Сообщение Добавлено: Вт июн 23, 2009 15:08
  Заголовок сообщения:   Ответить с цитатой
о-о-о в системе нет >mark и >resolve :dmad;


Код:
: >mark here compile compile exit ;
: >resolve here swap i! ;
Сообщение Добавлено: Вт июн 23, 2009 15:07
  Заголовок сообщения:   Ответить с цитатой
mOleg писал(а):
iv_ru писал(а):
т.е мусора в системе не остаётся? Я это имел в виду.

остается .
FORGET в современных системах не делают - отказались от него 8( но в общем зависит от системы
на смену ему в 94 стандарте есть слово MARKER (на мой взгляд очень неудобное) многие системы его поддерживают,
но смысл в обоих словах есть только на больших машинах, а на микроконтроллерах обычно стараются не переопределять слова.
вообще удаление слова из словаря возможно только, если его никто не использует, но даже в этом случае толку от
удаления слова из словаря будет мало(так как память распределяется по стековому принципу) - останется дырка в памяти, которую
использовать для чего-то полезного будет неудобно.

а для распечатки стека обычно в системе есть слово .S


Мне необходимо что-б я свои слова из системы мог удалить, не перезаливая всю эту систему заново :( (Forth в ней будет в качестве вызываемого модуля в добавок к firmware, но это уже не моя головная боль :D )

.s печатает весь стек, что не всегда удобно...

Про marker сейчас посмотрим...
Сообщение Добавлено: Вт июн 23, 2009 15:00

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


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