Forth
http://fforum.winglion.ru/

Как разработать кросс-компилятор Форта для микроконтроллеров
http://fforum.winglion.ru/viewtopic.php?f=39&t=2271
Страница 4 из 4

Автор:  Hishnik [ Пт дек 02, 2011 01:36 ]
Заголовок сообщения:  Re: Как разработать кросс-компилятор Форта для микроконтролл

Тогда получается, что надо для CREATE делать вариант RCREATE. При этом DOES> остается как есть, потому что оно на стек ничего не кладет, а просто дописывает в код переход на вот этот хвост, который после него. Вместо RO@ можно тоже @, если ПЗУ в общем адресном пространстве.

Предположим, что ПЗУ с данными находится в диапазоне 0x1000-0x1FFF, а ОЗУ - 0x7000-0x7FFF. Допустим также, что мы и туда, и туда чуть-чуть понаписали, и DP указывает на 0x7010, а RODP - на 0x1020. Тогда получается так:

: CONSTANT RCREATE RO, DOES> @ ; 5 CONSTANT FIVE

Слово CONSTANT создаст заголовок слова FIVE, и припишет ему код "push 0x1020". Далее RO, запишет 5 по адресу 0x1020 и передвинет указатель. Если мы теперь выполним FIVE, на стеке будет 0x1020. Вся работа по выбору между ПЗУ и ОЗУ уже сделана, можно пользоваться @.

Автор:  oco [ Пт дек 02, 2011 01:45 ]
Заголовок сообщения:  Re: Как разработать кросс-компилятор Форта для микроконтролл

Ага, понятно!
Но есть замечание, например в микроконтроллерах AVR два адресных пространства ПЗУ и ОЗУ с одинаковыми адресами, и чтение реализуется разными командами. Поэтому для нужны два слова "@" для чтения ОЗУ и "RO@" для чтения ПЗУ.

Еще вопрос: а если я не хочу словарные статьи вообще в ПЗУ создавать? Тогда как?
(то есть заголовки, я хотел сказать)

Автор:  Hishnik [ Пт дек 02, 2011 01:52 ]
Заголовок сообщения:  Re: Как разработать кросс-компилятор Форта для микроконтролл

oco писал(а):
Ага, понятно!
Но есть замечание, например в микроконтроллерах AVR два адресных пространства ПЗУ и ОЗУ с одинаковыми адресами, и чтение реализуется разными командами. Поэтому для нужны два слова "@" для чтения ОЗУ и "RO@" для чтения ПЗУ.

Да, все так.
oco писал(а):
Еще вопрос: а если я не хочу словарные статьи вообще в ПЗУ создавать? Тогда как?
(то есть заголовки, я хотел сказать)

Можно имена и адреса держать в памяти хост-машины, а в ПЗУ писать только код. Это часто делается при кросс-компиляции. Если от целевого МК не требуется в процессе работы самостоятельно интерпретировать передаваемые строки на Форте (для чего он должен иметь возможность найти в своей памяти, какому имени что соответствует), то имена в МК класть вобщем-то и не надо.

Автор:  oco [ Пт дек 02, 2011 02:04 ]
Заголовок сообщения:  Re: Как разработать кросс-компилятор Форта для микроконтролл

Спасибо за ответы, буду рыть дальше :)

Страница 4 из 4 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/