Forth http://fforum.winglion.ru/ |
|
amForth v3.4 Как забыть слово или все слова? http://fforum.winglion.ru/viewtopic.php?f=39&t=2156 |
Страница 2 из 2 |
Автор: | iv_ru [ Вт июн 23, 2009 15:00 ] |
Заголовок сообщения: | |
mOleg писал(а): iv_ru писал(а): т.е мусора в системе не остаётся? Я это имел в виду. остается . FORGET в современных системах не делают - отказались от него 8( но в общем зависит от системы на смену ему в 94 стандарте есть слово MARKER (на мой взгляд очень неудобное) многие системы его поддерживают, но смысл в обоих словах есть только на больших машинах, а на микроконтроллерах обычно стараются не переопределять слова. вообще удаление слова из словаря возможно только, если его никто не использует, но даже в этом случае толку от удаления слова из словаря будет мало(так как память распределяется по стековому принципу) - останется дырка в памяти, которую использовать для чего-то полезного будет неудобно. а для распечатки стека обычно в системе есть слово .S Мне необходимо что-б я свои слова из системы мог удалить, не перезаливая всю эту систему заново (Forth в ней будет в качестве вызываемого модуля в добавок к firmware, но это уже не моя головная боль ) .s печатает весь стек, что не всегда удобно... Про marker сейчас посмотрим... |
Автор: | iv_ru [ Вт июн 23, 2009 15:07 ] |
Заголовок сообщения: | |
о-о-о в системе нет >mark и >resolve Код: : >mark here compile compile exit ;
: >resolve here swap i! ; |
Автор: | mOleg [ Вт июн 23, 2009 15:08 ] |
Заголовок сообщения: | |
iv_ru писал(а): .s печатает весь стек, что не всегда удобно... но зато можно глянуть, как он сделан в конкретной системе, и отображать меньшее кол-во элементов. Потому как перечисленные выше варианты выглядят грубовато iv_ru писал(а): Мне необходимо что-б я свои слова из системы мог удалить, не перезаливая всю эту систему заново (Forth в ней будет в качестве вызываемого модуля в добавок к firmware, но это уже не моя головная боль )
надо смотреть, как устроен словарь в форт-системе (конкретной форт-системе) и могут быть отличия для распределенной системы (где словарь может быть на host-e а код на микроконтроллере) вобщем, в любом случае придется разбираться в том, как устроен словарь в конкретной системе, и как его можно корректно откатить... |
Автор: | Kopa [ Вт июн 23, 2009 15:16 ] |
Заголовок сообщения: | |
iv_ru писал(а): Forth в ней будет в качестве вызываемого модуля в добавок к firmware, но это уже не моя головная боль )
... т.е. роль интерфеса к существующей железячной плате и возможно ещё одной:) P.S. Лучше о "головной боли" пользователя подумать заранее, чтобы не было чего нехорошего. >mark и >resolve - это немного не то. Ближе к этому процессу слова CONTEXT и CURRENT но HERE конечно тоже необходимо восстановить. |
Автор: | iv_ru [ Вт июн 23, 2009 15:32 ] |
Заголовок сообщения: | |
Kopa писал(а): iv_ru писал(а): Forth в ней будет в качестве вызываемого модуля в добавок к firmware, но это уже не моя головная боль ) ... т.е. роль интерфеса к существующей железячной плате и возможно ещё одной:) P.S. Лучше о "головной боли" пользователя подумать заранее, чтобы не было чего нехорошего. >mark и >resolve - это немного не то. Ближе к этому процессу слова CONTEXT и CURRENT но HERE конечно тоже необходимо восстановить. На сколько я понял, то клиент получит файл с настройками, который надо будет передать форту, который сделает кое-какие манипуляции с железом, какие имменно не нужно знать клиенту, и другим тоже ( привет китайцам ). Такая политика у шефа нет таких слов: CONTEXT и CURRENT, есть только эти: http://amforth.sourceforge.net/words/ |
Автор: | Kopa [ Вт июн 23, 2009 16:02 ] |
Заголовок сообщения: | |
iv_ru писал(а): нет таких слов: CONTEXT и CURRENT, есть только эти:
http://amforth.sourceforge.net/words/ Есть GET-CURRENT SET-CURRENT про другие не понятно, и непривычно смотреть Форт текст в виде ссылок DW:) |
Автор: | iv_ru [ Вт июн 23, 2009 16:13 ] |
Заголовок сообщения: | |
Kopa писал(а): iv_ru писал(а): нет таких слов: CONTEXT и CURRENT, есть только эти: http://amforth.sourceforge.net/words/ Есть GET-CURRENT SET-CURRENT про другие не понятно, и непривычно смотреть Форт текст в виде ссылок DW:) Ну помоему, если я конечно всё правильно понял, то этими командами (GET-CURRENT SET-CURRENT) можно подключать/отключать словари, но при этом словари всегда находятся в системе. |
Автор: | Kopa [ Вт июн 23, 2009 16:30 ] |
Заголовок сообщения: | |
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). |
Автор: | iv_ru [ Ср июн 24, 2009 12:46 ] |
Заголовок сообщения: | |
Ну так всё-же как мне это сделать-то? Я, чесно говоря, пока понятия не имею... |
Автор: | Kopa [ Ср июн 24, 2009 13:11 ] |
Заголовок сообщения: | |
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 15:46 ] |
Заголовок сообщения: | |
Цитата: Ну так всё-же как мне это сделать-то? Я, чесно говоря, пока понятия не имею...
если вводите несколько вариантов одного слова друг за другом можно как-то так делать: Код: 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 он только и попадет в словарь. |
Автор: | Гость [ Чт июн 25, 2009 08:26 ] |
Заголовок сообщения: | |
iv_ru писал(а): Ну так всё-же как мне это сделать-то? Я, чесно говоря, пока понятия не имею...
MARKER работает как необходимо? |
Автор: | iv_ru [ Чт июн 25, 2009 19:05 ] |
Заголовок сообщения: | |
Anonymous писал(а): iv_ru писал(а): Ну так всё-же как мне это сделать-то? Я, чесно говоря, пока понятия не имею... MARKER работает как необходимо? Нет, не работает, да и слова такого нет, хотя по совету из Рассылки обновился до версии 3.4. Там же в Рассылке посоветовали : Код: words
marker qux words qux words Блин, как всё просто-то... только слова этого "marker" нет... |
Автор: | Kopa [ Пт июн 26, 2009 07:20 ] |
Заголовок сообщения: | |
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 ; |
Автор: | iv_ru [ Пт июн 26, 2009 12:35 ] |
Заголовок сообщения: | |
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 |
Страница 2 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |