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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: поможите с переводом
СообщениеДобавлено: Вс авг 19, 2018 12:42 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 905
Благодарил (а): 3 раз.
Поблагодарили: 33 раз.
Согласно информации c данной странички

Оптимизированный расчёт CRC-16 CCITT на языке Си, полином 0x8408
отличается от классического CRC-16, так как использует другой полином и порядок данных.
Код:
/*
  Name  : CRC-16 CCITT
  Poly  : 0x8408
  Init  : 0xFFFF
  Revert: false
  XorOut: 0x0000
  Check : 0x6F91 ("123456789")
  MaxLen: 4095 байт (32767 бит) - обнаружение
    одинарных, двойных, тройных и всех нечетных ошибок
*/
unsigned short crc_ccitt_update (unsigned short crc, unsigned char data)
{
   unsigned short t;
   data ^= crc&255;
   data ^= data << 4;
   t = (((unsigned short)data << 8) | ((crc>>8)&255));
   t ^= (unsigned char)(data >> 4);
   t ^= ((unsigned short)data << 3);
   return t;
}

Форт код
Код:
: crc-ccitt ( crc data -- crc' )
OVER 0xFF AND XOR
DUP 4 LSHIFT XOR  0xFF AND  >R
    8 RSHIFT 0xFF AND   R@ 8 LSHIFT OR
R@ 4 RSHIFT XOR
R> 3 LSHIFT XOR
0xFFFF AND
;

этот же crc16 (из SwiftForth)
Код:
0x8408 CONSTANT Poly16

: CRC16 ( crc data -- crc' )
      XOR
      8 0 DO  DUP 1 AND 0<> Poly16 AND
         SWAP 1 RSHIFT XOR
   LOOP ;


P.S. Похоже это и есть алгоритм из обсуждения в начале топика.
CRC-16/MCRF4XX - название в crc калькуляторе :) Catalogue of parametrised CRC algorithms with 16 bits

online crc калькуляторы разные в i-nete представлены...
Тоже большой калькулятор crc
Для Verilog
...
По циклическим кодам - одна из хороших книг Блейхут Р.Э. Теория и практика кодов, контролирующих ошибки.


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 905
Благодарил (а): 3 раз.
Поблагодарили: 33 раз.
Код:
: crc-ccitt ( crc data -- crc' )

    OVER  0xFF  AND XOR \ data ^= (crc & 255);
     DUP 4 LSHIFT XOR \ data ^= data << 4;
0xFF AND
     DUP
     DUP
     3 LSHIFT
     >R
     0xFF AND
     4 RSHIFT
     >R
     8 LSHIFT
     SWAP
     8 RSHIFT OR
     R> XOR
     R> XOR
0xFFFF AND
     ;

Добавил пару команд в исходный алгоритм
и получилось его идентифицировать
как CRC-16/X-25 (IN =0xFFFF Xor=0xFFFF)
или CRC-16/MCRF4XX (IN=0xFFFF 0)

P.S. И дополнительно для разнообразия (хотя CRC32 есть в devel SPF4) пара вариантов подсчёта CRC32 :)
Код:
\ This code can implement other types of CRC by using other polynomial constants:
\ use $8408 for CCITT CRC-16, or $a001 for IBM CRC-16.

: crc/ ( n -- n ) 8 0 DO DUP 1 RSHIFT SWAP 1 AND IF  0xEDB88320   XOR THEN LOOP ;
: crcfill   256 0 DO I crc/ , LOOP ;

CREATE crctbl crcfill

: crc32 ( crc n -- crc' ) OVER XOR 0xFF AND  CELLS crctbl + @  SWAP 8 RSHIFT XOR ;

Код:
0xEDB88320 CONSTANT Poly32               \ Bit-reversed polynomial

: CRC32 ( crc data -- crc' )
      XOR
      8 0 DO  DUP 1 AND 0<> Poly32 AND
         SWAP 1 RSHIFT XOR
   LOOP  ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: поможите с переводом
СообщениеДобавлено: Пн авг 20, 2018 12:37 
Не в сети
Аватара пользователя

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 224
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
KPG писал(а):
Добавил пару команд в исходный алгоритм
и получилось его идентифицировать
как CRC-16/X-25 (IN =0xFFFF Xor=0xFFFF)
или CRC-16/MCRF4XX (IN=0xFFFF 0)

и CRC-16/KERMIT (IN =0x0000 0)
в mecrisp'e скорострельность на тестовой строке
Код:
tst ' $crc count-ticks  ok.
. 1333  ok.
w0x.r  0000 2189 ok.

зы.
хорошо потрудились. спасибо.
желаю каждому фортеру взаимопонимания и сотрудничества с другими братьями по разуму :D


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

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


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

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


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

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