Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб июл 21, 2018 13:53

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 15, 2010 22:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6344
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
chess писал(а):
2. Быстродействие данных решений не в пользу табличных, так
как таблицы здесь не выдают результаты за одно обращение к ним,
а требуется пробежать по таблице.

Однако эти решения годятся для произвольного количества перестановок, а не только для одного переставленного бита. К тому же сразу видо, что и куда пошло.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 16, 2010 19:04 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4920
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
Хищник писал(а):
Однако эти решения годятся для произвольного количества перестановок, а не только для одного переставленного бита. К тому же сразу видо, что и куда пошло.

кстати да. Табличные решения могут давать непредсказуемые проблемы (достаточно не правильно один бит набрать...).

насчет обработки группы бит, это и я заметил, но решил без них.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 16, 2010 19:22 
Не в сети
Administrator
Administrator
Аватара пользователя

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

и чем эти проблемы страшнее косоглазого тополога?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 16, 2010 19:31 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4920
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
WingLion писал(а):
и чем эти проблемы страшнее косоглазого тополога?

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 16, 2010 19:41 
Не в сети
Administrator
Administrator
Аватара пользователя

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


Может, я туплю, но как этот адрес станет редким при 20 штуках адресов всего?
Чтобы ошибиться в таблицах, что у меня в решении, надо быть не только косоглазым, но и криворуким, чтобы не на те кнопки нажимать и не увидеть, что нажал не то.

mOleg писал(а):
Короче, если есть возможность не набирать таблицу, а вычислить ее, лучше вычислять Smile особенно, если таблица большая.

У меня она фактически вычисляется... каждый элемент таблицы - в момент использования

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 16, 2010 23:24 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6344
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
mOleg писал(а):
То есть такие ошибки наиболее тяжело отыскиваются в силу своей редкости и неожиданности.
Короче, если есть возможность не набирать таблицу, а вычислить ее, лучше вычислять особенно, если таблица большая.

То есть вычисление таблицы программируется проще, чем сама таблица? :shock: И что значит "большая таблица"? В ней число элементов равно числу разрядов. Кстати, проверка целостности данных делается очень просто - OR по всем элементам, и должно получиться число, у которого единицы во всех младших разрядах, а их число равно разрядности адреса/данных. Это будет гарантией того, что каждая маска упомянута в таблице по одному разу. Вот уж гарантия правильного размещения масок - извините, это "проверка на криворукость". Ошибиться в программировании вычисления маски существенно проще, поскольку результат не виден.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 17, 2010 17:21 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2109
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 36 раз.
Хищник писал(а):
Ошибиться в программировании вычисления маски существенно проще, поскольку результат не виден.

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

Вот вариант с классическими решающими таблицами:

Код:
16 CONSTANT NADDR \ разрядность адреса
8 CONSTANT NDATA \ разрядность данных

0 VALUE [Amix]    \ нач. адрес таблицы перепутывания адресов
0 VALUE [Dmix]    \ нач. адрес таблицы перепутывания данных

\ обмен пары разрядов
: SWAPB ( bitmask n  -- n')
  SWAP 2DUP AND OVER 1 SWAP WITHIN AND XOR ;

: LOAD-TABLES
  BASE @ >R 0x2 BASE !
  1 NADDR LSHIFT DUP DUP ALLOCATE THROW DUP TO [Amix] SWAP ERASE
  0
  DO
  \ FEDCBA9876543210
    0000000000010001  \ обмен шин A0 и A4 на выводах ПЗУ
    0000000000100010  \ обмен шин A1 и A5

    I SWAPB SWAPB [Amix] I + C!
  LOOP
  1 NDATA LSHIFT DUP DUP ALLOCATE THROW DUP TO [Dmix] SWAP ERASE
  0
  DO
  \ 76543210
    01000010  \ обмен шин D1 и D6 на выводах ПЗУ
    10000100  \ обмен шин D2 и D7

    I SWAPB SWAPB [Dmix] I + C!
  LOOP R> BASE ! ;

\ табличное преобразование адреса и данных
: Aperf ( A -- A') [Amix] + C@ ;
: Dperf ( D -- D') [Dmix] + C@ ;

Остальное типовая обертка

ПС. Из табличных вариантов решений - этот самый быстрый, но и требует соответствующего объема памяти.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс мар 21, 2010 19:20 
Не в сети

Зарегистрирован: Сб янв 26, 2008 18:23
Сообщения: 71
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Шина A0 у него пошла на вывод A4 ПЗУ, шина A1 на вывод A5,
шина D1 на вывод D6, шина D2 на вывод D7.


: rszbor ( b -- 1..2..3..4.....8..) 8 0 DO 2 /mod LOOP ;
: sborADR ( 1..2..3.....8..-- b) 2* + 2* + 2* + >R 3 Pick 2* + 2* + 2*+ R> 2* +
: sborDATA (1..2..3.....8..-- b) ... ... ...

реально бы наверное использовал для создания 2-х массивов для перекодировки младших 4-х бит адреса (16 ячеек) и байта данных (256 ячеек)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 22, 2010 12:44 
Не в сети

Зарегистрирован: Сб янв 26, 2008 18:23
Сообщения: 71
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
\ Раз уж Форт позиционирует себя как язык для встраевыемых систем то - вообще то должна быть базовая библиотечка для работы с битами с числами разной длинны
\ нечто вроде GetBit( N i -- 0|1) SetBit (N 0/1 i --) SwapBit (N i1/i2 --) ещё чего?
\ потому что решая в лоб легко ошибиться - я ошибся раз 5 пока не отладил инициализацию массивов.

Код:
Create m 8 allot
: m@          ( i --0/1 )   m + c@ ;
: m!          ( 0/1 i-- )   m + c! ;
: razval_byte ( b --    )   8 0 DO 2 /Mod swap I m! LOOP drop ;
: .m          ( --      )   8 0 DO I m@ . LOOP ;
: sbor_Adr    ( -- b    )   0 m@ 2* 1 m@ + 2* 6 m@ + 2* 7 m@ + 2* 4 m@ + 2*  5 m@ + 2* 2 m@ + 2* 3 m@ + ;
: sbor_DAT    ( -- b    )   7 m@ 2* 6 m@ + 2* 2 m@ + 2* 3 m@ + 2* 4 m@ + 2*  5 m@ + 2* 6 m@ + 2* 7 m@ + ;


create Mass_ADR 32  allot
create Mass_DAT 256 allot

: init_ ADR ( --) 32  0 DO i razval_byte sbor_Adr 31 AND i  Mass_ADR + c! LOOP ; init_ ADR
: init_ DAT ( --) 256 0 DO i razval_byte sbor_DAT        i  Mass_DAT + c! LOOP ; init_ DAT

\ основные процедуры:
: GetAdr ( A--A)  dup 31 AND Mass_ADR + c@ swap 224 AND + ; \ меняем только младшие 5 бит  - экономим  224 байта
: GetDAT ( A--A)  Mass_DAT + c@ ;  / меняем всё 8 младших 8 бит - быстрее,


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 22, 2010 17:52 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
WingLion писал(а):
Может, я туплю, но как этот адрес станет редким при 20 штуках адресов всего?
Чтобы ошибиться в таблицах, что у меня в решении, надо быть не только косоглазым, но и криворуким, чтобы не на те кнопки нажимать и не увидеть, что нажал не то.

Бывает и такое :))

Чернушный офтоптный стишок

- Шеф, помоги - гдЕ я ступил? -
так "ламер" "хакера" просил...
Никак не хочет код работать -
найти ошибку нету сил...

Лукаво хакер смотрит в код
(а дел своих невпроворот):

- Ошибку вижу я
пока ...
прости, лишь только - в ДНК


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

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


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

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


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

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