Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт апр 19, 2024 20:24

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 151 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10, 11  След.
Автор Сообщение
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Сб июн 09, 2012 08:58 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Да, добавьте если не сложно. Просто выбираю форт для 128-ой - вот и хочется руками пощупать разные форты. Рраньше для авр не приходилось программировать.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


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

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

Добавил.
Но есть нюансы:
1. Не тестировал прерывания
2. Форт-система 16-разрядная, а в словах @P и C@P используется команда LPM, поэтому доступ есть только к младшим 64К флэш-памяти

Можете пробовать файл examples/tst/tst.spf, настроил на mega128, минимально испытывал в proteus-е (файл test_m128.dsn).
Файл перезалил: http://compas.com.ua/oco/file/avrforth-0.7.tar.gz


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

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
Спасибо. На следующей неделе посмотрю. Там же есть мануал/описание?

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


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

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
VoidVolker писал(а):
Спасибо. На следующей неделе посмотрю. Там же есть мануал/описание?

Мануал есть.

Вот еще вспомнил: из-за 16-разрядности определяющие слова PCREATE/PDOES>, а также EXECUTE тоже будут работать только в первых 64 КБ


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

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
В генерируемом коде попадаются переходы без которых можно обойтись.
Например это
Код:
: UM+        ( u1 u2 -- ud )                 ( add top two items, double result)
  [
    poptmp
    tmpl tosl add
    tmph tosh adc
    pusht
    0x0 tosl ldi
    if_c
      tosl inc
    then
    tosh clr
  ]
;

оптимальнее (и по скорости и по размеру кода) будет записать так :
Код:
: UM+        ( u1 u2 -- ud )                 ( add top two items, double result)
  [
    poptmp
    tmpl tosl add
    tmph tosh adc
    pusht
    0x0 tosl ldi
    tosl tosl adc
    tosh clr
  ]
;


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

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Ethereal писал(а):
В генерируемом коде попадаются переходы без которых можно обойтись.
Например это
[skip]

Согласен.


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

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Новая версия 0.8
Переработал все слова для работы с портами ввода-вывода, получается более читаемый код. Теперь для чтения порта используйте C@
Код:
DDRD C@

Для записи - C!
Код:
0x7 PORTB C!

Компилятор постарается использовать оптимальные инструкции, если известен адрес и/или значение для записи
Также слова SET, CLEAR, MASK, TOGGLE используют более простой синтаксис, например:
Код:
7 BIT  DDRD SET

вместо
Код:
[ DDRD 7 BIT ] SET

Слова AND, OR, XOR, +, - оптимизируют код, если используется операция с одним литералом, например
Код:
20 +

преобразуется в
Код:
20 tosl adiw

и т.д.
Соответственно, переделаны и протестированы все примеры и библиотеки.
Можно качать http://compas.com.ua/oco/file/avrforth-0.8.tar.gz


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

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Новая версия 0.9
- оптимизация DROP literal, popt pusht
- исправлен цикл DO..LOOP (не работало с отрицательными аргументами)
- добавлено слово +LOOP
- добавлено слово J
- доработан листинг
- доработан дизассемблер
Как обычно, качать тут: http://compas.com.ua/oco/file/avrforth-0.9.tar.gz


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

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Тогда не понятно зачем ты предыдущие версии выкладывал ?
Представь, что кто-нибудь скачал твое творение и начал пользоваться.
И тут вдруг обнаруживается, что DO..LOOP работает неправильно, а
+LOOP вообще нету. Ты уж сначала отладь ядро и только потом выкладывай.

В поставке SPF есть замечательный тест для ядра ANS-Forth. Вот этот :
\ >From: john@netnews.jhuapl.edu (John Hayes)
\ Subject: Testing CORE Words (coretest.fr)
\ (C) 1993 JOHNS HOPKINS UNIVERSITY / APPLIED PHYSICS LABORATORY
\ MAY BE DISTRIBUTED FREELY AS LONG AS THIS COPYRIGHT NOTICE REMAINS.
\ VERSION 1.0
\ THIS PROGRAM TESTS THE CORE WORDS OF AN ANS FORTH SYSTEM.
\ THE PROGRAM ASSUMES A TWO'S COMPLEMENT IMPLEMENTATION WHERE
\ THE RANGE OF SIGNED NUMBERS IS -2^(N-1) ... 2^(N-1)-1 AND
\ THE RANGE OF UNSIGNED NUMBER IS 0 ... 2^(N)-1.
\ I HAVEN'T FIGURED OUT HOW TO TEST KEY, QUIT, ABORT, OR ABORT"...
\ I ALSO HAVEN'T THOUGHT OF A WAY TO TEST ENVIRONMENT?...
Ну и напусти его на свой Форт. Если он тест проходит - можно выкладывать.
А если нет, то вот тебе и подсказка что нужно исправить.


Последний раз редактировалось Ethereal Вс авг 19, 2012 11:36, всего редактировалось 1 раз.

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

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Да и LOOP у тебя опять неправильно.
Вот такие циклы
DECIMAL
32768 0 DO ... LOOP
HEX
FFFF 0 DO ... LOOP
у тебя выполнятся ровно 1 раз.

Аналогично +LOOP неправильно.
Вот это
DECIMAL
32768 0 DO ... 1 +LOOP
HEX
FFFF 0 DO ... 1 +LOOP
тоже выполнится 1 раз.

Да и
0 0 DO ... LOOP
должно выполняться 65536 раз, а не один.


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

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

В поставке SPF есть замечательный тест для ядра ANS-Forth. Вот этот :
\ >From: john@netnews.jhuapl.edu (John Hayes)
\ Subject: Testing CORE Words (coretest.fr)
\ (C) 1993 JOHNS HOPKINS UNIVERSITY / APPLIED PHYSICS LABORATORY
\ MAY BE DISTRIBUTED FREELY AS LONG AS THIS COPYRIGHT NOTICE REMAINS.
\ VERSION 1.0
\ THIS PROGRAM TESTS THE CORE WORDS OF AN ANS FORTH SYSTEM.
\ THE PROGRAM ASSUMES A TWO'S COMPLEMENT IMPLEMENTATION WHERE
\ THE RANGE OF SIGNED NUMBERS IS -2^(N-1) ... 2^(N-1)-1 AND
\ THE RANGE OF UNSIGNED NUMBER IS 0 ... 2^(N)-1.
\ I HAVEN'T FIGURED OUT HOW TO TEST KEY, QUIT, ABORT, OR ABORT"...
\ I ALSO HAVEN'T THOUGHT OF A WAY TO TEST ENVIRONMENT?...
Ну и напусти его на свой Форт. Если он тест проходит - можно выкладывать.
А если нет, то вот тебе и подсказка что нужно исправить.

Специально и выкладывал, чтобы народ и подсказал, что не так :)
Насчет теста посмотрю


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

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Ethereal писал(а):
Да и LOOP у тебя опять неправильно.
Вот такие циклы
DECIMAL
32768 0 DO ... LOOP
HEX
FFFF 0 DO ... LOOP
у тебя выполнятся ровно 1 раз.

Максимальное положительное 16-битное число - это 32767, 32768 - отрицательное, поэтому 1 раз, FFFF - это -1, поэтому тоже 1 раз

Ethereal писал(а):
Аналогично +LOOP неправильно.
Вот это
DECIMAL
32768 0 DO ... 1 +LOOP
HEX
FFFF 0 DO ... 1 +LOOP
тоже выполнится 1 раз.

Аналогично
Ethereal писал(а):
Да и
0 0 DO ... LOOP
должно выполняться 65536 раз, а не один.

Где такое указано?

Кстати, смотрел тест, и по нему граничные циклы проходят правильно:
Код:
\ GD1
  MID_UINT+1 @ MID_UINT @ DO
      I . BL EMIT
  LOOP
\ 32767
 
\ GD2
  MID_UINT @ MID_UINT+1 @ DO
      I . BL EMIT
  -1 +LOOP
\ -32768 32767


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Вс авг 19, 2012 18:34 
Ethereal писал(а):
Да и LOOP у тебя опять неправильно.
Вот такие циклы
DECIMAL
32768 0 DO ... LOOP
HEX
FFFF 0 DO ... LOOP
у тебя выполнятся ровно 1 раз.

Аналогично +LOOP неправильно.
Вот это
DECIMAL
32768 0 DO ... 1 +LOOP
HEX
FFFF 0 DO ... 1 +LOOP
тоже выполнится 1 раз.

n - число бит
2^n - это максимальное количество возможных кодов для данного числа бит, иными словами - от 0...0000 до 1...1111
2^n-1 - это предельная масса бита, т.е. эквивалент его пикового значения (все единицы) в любой другой (чаще всего, разумеется, в десятичной) системе счисления
Таким образом, максимальное значение для 15 бит в десятичном представлении - 32767, в то время как 32768 - это уже "вес" единицы, расположенной в шестнадцатом разряде, после которой следуют нули. Если учитывать, что используется дополнительный код, а именно он, несомненно, и используется, то такое число будет отрицательным, - кода речь идёт не о беззнаковых числах, - так как единица в старшем разряде означает "минус".


oco писал(а):
Максимальное положительное 16-битное число - это 32767, 32768 - отрицательное, поэтому 1 раз, FFFF - это -1, поэтому тоже 1 раз

Да, применительно к числам со знаком - отрицательное. Однако, 1000 0000 0000 0000b - это не -1d, а -32768d! -1 = 1111 1111 1111 1111 - по крайней мере так оформляют все вменяемые люди.

Ethereal писал(а):
Да и
0 0 DO ... LOOP
должно выполняться 65536 раз, а не один.
oco писал(а):
Где такое указано?


В стандарте, вероятно. Беда правда в том, что читали его из местных лишь избранные, в число коих я пока, к сожалению, тоже не вхожу. Хотя, здесь Ethereal прав. Индекс, начиная с нуля, должен увеличиваться на единицу до тех пор, пока не достигнет лимита, как в случае их, индекса и лимита, равенства, так и в случае индекса, превышающего лимит. Во-первых, это понятно на интуитивном уровне. Во-вторых, если сомневаетесь, возьмите любую продвинутую Форт-систему, скажет, SwiftForth, и введите:
: test 0 0 do i . loop ;


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

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


Последний раз редактировалось oco Вс авг 19, 2012 18:48, всего редактировалось 1 раз.

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

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Код:
6.1.1800   LOOP                                                            CORE
        Интерпретация: Семантика интерпретации для этого слова не определена.

        Компиляция: ( C: do-sys -- )
            Добавляет семантику времени-выполнения, данную ниже к текущему
            определению. Разрешает назначения для всех неразрешенных ссылок
            LEAVE между адресом ячейки определенным do-sys и следующим за LOOP
            адресом ячейки для передачи управления к выполнению слова после
            LOOP.

        Время-выполнения: ( -- )  ( R:  loop-sys1 --  | loop-sys2 )
            Неопределенная ситуация существует, если параметры управления цикла
            недоступны. Добавляет один к индексу цикла. Если после этого индекс
            цикла равен пределу цикла, снимает параметры цикла, и продолжает
            выполнение непосредственно после цикла. Иначе продолжает выполнение
            с начала цикла.

Да, по DO LOOP согласен с вами, тут у меня ошибка. Будем исправлять...


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

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


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

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


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

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