Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 15:47

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 151 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 11  След.
Автор Сообщение
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пт фев 24, 2012 14:41 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
oco писал(а):
Какие еще предложения будут?

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

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пт фев 24, 2012 15:02 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
OK, сделаю.
Для начала можно посмотреть файл tst.f - там примеры с комментариями


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пт фев 24, 2012 17:34 
oco писал(а):
Какие еще предложения будут?

Какой вариант оптимизатора планируется к рассмотрению?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пт фев 24, 2012 18:04 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Оптимизатора не будет. Решил отказаться. Оптимизировать там нечего.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пт фев 24, 2012 18:25 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
oco писал(а):
Оптимизатора не будет. Решил отказаться. Оптимизировать там нечего.


Надо было сказать, что оптимизатор будет самым оптимальным - НУЛЬ-оптимизатором - который вообще ничего делать не будет.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пт фев 24, 2012 19:36 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Чтобы он работал, ему нужен чисто ассемблерный код, значит надо делать макроподстановку, что сильно раздувает код, а памяти мало.
Я его не выкидывал, если найдутся желающие - всегда пожалуйста.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пт фев 24, 2012 19:53 
oco писал(а):
Чтобы он работал, ему нужен чисто ассемблерный код, значит надо делать макроподстановку, что сильно раздувает код, а памяти мало.
Я его не выкидывал, если найдутся желающие - всегда пожалуйста.


Макроподстановка, не обязательно раздувает код, хотя и может
и макроподстановка это самая "непритязательная" оптимизация.
Простые оптимизации, как хвостовая оптимизация, литеральные
подстановки и др. (нужно посмотреть варианты) вполне реальны.
В AVR много регистров и это можно неплохо использовать.

P.S. Подход возможного использования оптимзатора в AVR требует дополнительного осмысления.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Сб фев 25, 2012 19:11 
Небольшое "эccе"
после ознакомления с правилами макро-оптимизации применёнными в rforth ( Форт для PIC)
Код:
1. Хвостовая рекурсия.
   : x y z ;

   call y
   goto z

2. Удаление лишних dup/drop

3. Замена шаблона <число команда>
   Пример: 9 and \ в данном случае, при условии 0<число<255 
           
    код: 0x9 r26 andi

    Кроме того, в сочетании с избыточным dup/drop с кодом,
    можно сделать следующее:
    (т.к. нет команды тестирования битов по маске то можно так)

    dup 9 and if  \ if поглащает тестируемое число на стеке

    r26 -[y] st   \ 
    0x09 r26 sbrc \ уточнить маска не инверсная значение маски 0...255
    [y]+ r26 ld   \

             if   \ как бы и не учитывается

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

    current @ 1+ 7 and next !

    \ реализацию можно сделать по аналогии с предыдущими оптимизациями
    \ или придумать свою

5. Инверсии условия
   короткие (одна команда) условия-действия превращаются
   в реверсивные условия

   : z portc 2 high? \ можно и для регистра или ячейки памяти подобное сделать
       if porta 0 low then portb 1 high ;

   portc 2 sbis ; пропустить следующую инструкцию если portc.2 низкий
   porta 0 cbi  ; сбросить бит в porta.0
   portb 1 sbi  ; установить бит в portb.1
   ret          ;

6-8. Специфичны для PIC

9. Удаление избыточного кода, если при тестировании бит статуса Z уже имеет
   правильный результат, никаких дополнительных тестов не надо генерировать.

   9 and dup if 1+ then \ операцию dup можно смело при генерации удалять

   Кроме того, компилятор может определять операции, которые не изменяют
   второй элемент стека ( 1-й вершина стека).
           
   dup checksum xor! dcc-high !

10. увеличение/уменьшение и пропустить,
    если проверяется условие достижения нуля. 

   : action-times ( n -- ) begin action 1- dup while repeat drop ;

    action call ; action
        1- call ; 1-
    begin  brne ; переход на начало цикла
    drop   call
    ret

11. Значения не нормализуется, когда в этом нет необходимости

   :: x ( n -- flag ) 3 < if a then ;

   0xFD TOS adiw ;
   drop     call ;
   ret      brne ; переход на точку возврата
   a        goto
   ret

  после слова < нет необходимости в нормировании значения к True|False,

12. Оптимизация слова, оканчивающиеся на константы
    Если слово помечено как возвращение на вершине стека значение/флаг
    то используется специальная инструкция.

    : check-portd ( -- n/w )
      portd 3 high? if 3 >w exit then
      portd 4 high? if 4 >w exit then
      0 >w ; return-in-w

    \ btfsc 0x08,3
    \ retlw 0x03
    \ btfsc 0x08,4
    \ retlw 0x04
    \ retlw 0x00

    \ не совсем понятно, как это учитывается PIC компилятором
    \ т.к. верхушка стека должна быть продублирована,
    \ перед вызовом такого слова
    \ для AVR обобщённого компактного кода может не получится.

13. Использование subwf когда это возможно

    variable v1
    variable v2

    : op v1 v2 -! ;

    \ movf 0x22,w
    \ subwf 0x23,f
    \ return

P.S. PIC контроллер, возможно более эффективен, чем AVR
при использования макрооптимизаций для Форт кода.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Сб фев 25, 2012 19:44 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Пока представляю приблизительно, как реализовать п.1-3, остальное пока смутно...
п.9,10 - а как мы узнаем, что флаг Z установлен правильно?
п.12, 13 - не понял, так как PIC совсем не знаю
п.11 - вместо 0xfd tos adiw надо 0х03 tos sbiw


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Сб фев 25, 2012 21:43 
oco писал(а):
Пока представляю приблизительно, как реализовать п.1-3, остальное пока смутно...
п.9,10 - а как мы узнаем, что флаг Z установлен правильно?
п.12, 13 - не понял, так как PIC совсем не знаю


п.9,10 Операця and и её замена одной командой воздействует
на флаги процессора. Если после этого их никто не изменяет
(dup точно не должна изменить, но могут ещё вклиниваться
прерывания, но там должен регистр флагов сохраняться)

п.12 btfsc 0x08,3 \ анализ бита порта и пропуск следующей
\ команды при "положительном" результате
retlw 0x03 \ возврат из подпрограммы со значением
\ в аккумуляторе в AVR нет такой команды
поэтому число команд будет больше.

п.13 В PIC можно указать, после операции вычитания,(если
не забыл) какой операнд использовать в качестве приёмника
результата.
и в самом форте добавлена специфичная команда -! работающая по этому принципу.

P.S. Вроде так, если "память не изменяет".
Неплохо бы, чтобы некие оптимизации были возможны
на базовом уровне SPF (с учётом специфики конкретной аппаратуры процессора)
Другие макрооптимизации можно выводить рассматривая "под
микроскопом" раочий код и обдумывая возможные схемы его оптимизации.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Сб фев 25, 2012 21:53 
При встраивании команд необходимо учитывать диапазон литерала
байт или стандартная ячейка т.к. тогда придётся добавлять
дополнительные команды или не применять инлайн подстановку.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Сб фев 25, 2012 22:19 
oco писал(а):
Какие еще предложения будут?


Может быть совмешение, по возможности с базисными словами,
из других Форт систем для контроллеров и/или в частности с amForth.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Сб фев 25, 2012 22:48 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Гость писал(а):
Неплохо бы, чтобы некие оптимизации были возможны
на базовом уровне SPF (с учётом специфики конкретной аппаратуры процессора)
Другие макрооптимизации можно выводить рассматривая "под
микроскопом" раочий код и обдумывая возможные схемы его оптимизации.

Что понимается под "базовым уровнем SPF"?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Сб фев 25, 2012 22:49 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
`Kopa писал(а):
При встраивании команд необходимо учитывать диапазон литерала
байт или стандартная ячейка т.к. тогда приётся добавлять
дополнительные команды или не применять инлайн подстановку.

Да. К примеру adiw, sbiw принимают число в диапазоне 0..63


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Сб фев 25, 2012 22:50 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
`Kopa писал(а):
oco писал(а):
Какие еще предложения будут?


Может быть совмешение, по возможности с базисными словами,
из других Форт систем для контроллеров и/или в частности с amForth.

Согласен, посмотрю.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 151 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 11  След.

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


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

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