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

...
Google Search
Forth-FAQ Spy Grafic

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




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

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 224
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
попался в руки Single Axis Analog Gyro,
подключаю к m32A@16MHz+am4th5.1
на просторах (тырпыр)нета нашел формулу:
Код:
angularVelocity = ((double)(sensorValue-reference_Value)*4930.0)/1023.0/0.67; //get the angular velocity

перевел на forth так:
Код:
  :  gyro@  ( --- d )

       !adc@
       sens-ref @ -        ( n1 ) \ correction
       &4930.               ( n1 d )
       rot 
       $3ff m*/             ( 1023.0) ( d n1 n2 )
                                \ ( d1 n2 u3 -- dquot )
       2 3  m*/             \ /0.67

       ;


где:
!adc@ - запуск и результат ацп - работает
sens-ref - результат калибровки после включения
префикс перед числом $-шестнадцатиричное, &-десятичное,
точка после числа = двойное ( 2 cells )
m*/ ( d1 n2 u3 -- dquot ) \ double m-star-slash
десятичное 0.67 заменил дробью 2/3, по-моему - вполне...

правильно ли я перевёл? вопрос.
а я сомневаюсь, тямы недостаёт. просветите темного.


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

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Код:
angularVelocity = ((double)(sensorValue-reference_Value)*4930.0)/1023.0/0.67; //get the angular velocity

: av ( sv rv -- av ) - 7 * ;
Приблизительно :)


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

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 224
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
стесняюсь спросить соответствует ли
Код:
\
    : crc-ccitt ( crc data -- crc' )

      over $ff  and xor   \ data ^= (crc & 255);
      dup  4 lshift xor   \ data ^= data << 4;
      dup
      dup   
      3 lshift
      >r
      $ff  and
      4 rshift
      >r
      8 lshift
      swap
      8 rshift or
      r> xor
      r> xor
      ;
\

вот этому
Код:
\ фрагмент http://svn.savannah.nongnu.org/viewvc/avr-libc/trunk/avr-libc/include/util/crc16.h?view=markup&revision=933
\
\     /** \ingroup util_crc
\     Optimized CRC-CCITT calculation.
\     
\     Polynomial: x^16 + x^12 + x^5 + 1 (0x8408)<br>
\     Initial value: 0xffff
\     
\     This is the CRC used by PPP and IrDA.
\     
\     See RFC1171 (PPP protocol) and IrDA IrLAP 1.1 https://ru.wikipedia.org/wiki/PPP_(сетевой_протокол)
\     
\     \note Although the CCITT polynomial is the same as that used by the Xmodem
\     protocol, they are quite different. The difference is in how the bits are
\     shifted through the alorgithm. Xmodem shifts the MSB of the CRC and the
\     input first, while CCITT shifts the LSB of the CRC and the input first.
\     
\     The following is the equivalent functionality written in C.
\     
\     \code
\     uint16_t
\     crc_ccitt_update (uint16_t crc, uint8_t data)
\     {
\     data ^= lo8 (crc);
\     data ^= data << 4;
\     
\     return ((((uint16_t)data << 8) | hi8 (crc)) ^ (uint8_t)(data >> 4)
\     ^ ((uint16_t)data << 3));
\     }
\     \endcode */

?
туплю(
спасибо.


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 907
Благодарил (а): 3 раз.
Поблагодарили: 33 раз.
chu писал(а):
?

Похоже на правду :)
но в исходном тексте есть такая строчка "Initial value: 0xffff"

P.S. Здесь crc16 так считается
или вот ещё один вариант
...
Гугль в помощь "crc16 forth" :)


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

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 224
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
KPG писал(а):
Похоже на правду :)

беспокоит только наличие единички в старшем полуслове циклического избыточного кода
Код:
ok.
$ffff variable seed  ok.
    : crc-ccitt ( crc data -- crc' )  ok.
  ok.
      over $ff  and xor     ok.
      dup  4 lshift xor     ok.
      dup  ok.
      dup     ok.
      3 lshift  ok.
      >r  ok.
      $ff and   ok.
      4 rshift  ok.
      >r  ok.
      8 lshift  ok.
      swap  ok.
      8 rshift or  ok.
      r> xor  ok.
      r> xor  ok.
      ;  ok.
  ok.
  ok.
    0 variable 'crc  ok.
    : crc      'crc @ ?dup 0= if cr ." негони" exit then execute ;   ok.
    : $crc ( a # --- crc )  ok.
        seed @ -rot  ok.
        over + swap  ok.
        do   i  c@  crc loop  ok.
        ;  ok.
  ok.
: tst s" 123456789" ;  ok.
  ok.
' crc-ccitt 'crc !  ok.
seed @ w0x.r  0000 FFFF ok.
tst $crc w0x.r  0004 75A3 ok.

это допустимо? или гложут меня сомнения.
отсюда Циклический избыточный код
КАК ПОСЧИТАТЬ КОНТРОЛЬНУЮ СУММУ неочевидно


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 907
Благодарил (а): 3 раз.
Поблагодарили: 33 раз.
chu писал(а):
беспокоит только наличие единички в старшем полуслове циклического избыточного кода

Здесь после вычисления ещё делается один XOR и для CRC16 в этом алгоритме должно браться $8408
У меня по выше переведённой формуле в SPF4 получается число 0xE0CF8 на тестовой строке, 123456789
а в алгоритме с rosetta при замене константы на $8408 0x906E :shuffle;


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

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 224
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
этих CRC алгоритмов великое множество.
Элементарное руководство по CRC алгоритмам обнаружения ошибок
но от того не легче :(
напрягает фраза
Цитата:
Optimized CRC-CCITT calculation.


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 907
Благодарил (а): 3 раз.
Поблагодарили: 33 раз.
chu писал(а):
напрягает фраза
Цитата:
Optimized CRC-CCITT calculation.

Может ещё добавить приведение (uint16_t)data
$ffff and
после строк
Код:
      over $ff  and xor   \ data ^= (crc & 255);
      dup  4 lshift xor   \ data ^= data << 4;

для данных т.к. алгоритм для AVR, но вроде это не существенно :)
типы входных параметров uint16_t crc, uint8_t data


Последний раз редактировалось KPG Сб авг 18, 2018 12:56, всего редактировалось 1 раз.

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

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 224
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
KPG писал(а):
Может ещё добавить приведение (uint16_t)data
$ffff and

не помогло :|
в SPF4 (32bit)
Код:
>
Ok
>S" 123456789" $crc w0x.r
0001 1352 Ok
>


Последний раз редактировалось chu Сб авг 18, 2018 13:18, всего редактировалось 1 раз.

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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 907
Благодарил (а): 3 раз.
Поблагодарили: 33 раз.
chu писал(а):
KPG писал(а):
Может ещё добавить приведение (uint16_t)data
$ffff and

не помогло :|

А какое правильное число должно получится на строке 123456789 ?


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

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 224
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
KPG писал(а):
А какое правильное число должно получится на строке 123456789 ?

кто бы знал :pilot2;
Online CRC Calculator


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

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 224
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
упс, наврал. в SPF4(32bit)
Код:
>S" 123456789" $crc w0x.r
0004 75A3 Ok
>

так же, как в mecrisp'e


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 907
Благодарил (а): 3 раз.
Поблагодарили: 33 раз.
chu писал(а):
кто бы знал :pilot2;

По С алгоритму отсюда
возможен такой вариант :)
Код:
0x1021 CONSTANT POLY
: crc16  ( crc data -- crc' )
  8 LSHIFT XOR
  8 0 DO
         DUP 0x8000 AND IF 1 LSHIFT POLY XOR
                         ELSE 1 LSHIFT  THEN
      LOOP
  0xFFFF AND
;


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 907
Благодарил (а): 3 раз.
Поблагодарили: 33 раз.
По такому коду (найдено в i-net)
Код:
// Update the CRC for transmitted and received data using
// the CCITT 16bit algorithm (X^16 + X^12 + X^5 + 1).

    unsigned char ser_data;
    static unsigned int crc;

    crc  = (unsigned char)(crc >> 8) | (crc << 8);
    crc ^= ser_data;
    crc ^= (unsigned char)(crc & 0xff) >> 4;
    crc ^= (crc << 8) << 4;
    crc ^= ((crc & 0xff) << 4) << 1;


составлен Форт код
Код:
: crc16 ( crc data -- crc' )
SWAP DUP 8 LSHIFT SWAP 8 RSHIFT  OR
XOR
DUP 0xFF AND 4 RSHIFT XOR
DUP 12 LSHIFT  XOR
DUP 0xFF AND 5 LSHIFT XOR
0xFFFF AND
;


P.S. Полином 0x1021


Последний раз редактировалось KPG Вс авг 19, 2018 08:37, всего редактировалось 1 раз.

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

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 224
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
KPG писал(а):
возможен такой вариант :)

соответствует. Online CRC Calculator
в зависимости от значения init -
либо CRC-16/CCITT-FALSE
либо CRC-16/XMODEM


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

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


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

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


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

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