Forth http://fforum.winglion.ru/ |
|
поможите с переводом http://fforum.winglion.ru/viewtopic.php?f=39&t=2959 |
Страница 1 из 2 |
Автор: | chu [ Вс авг 18, 2013 12:29 ] |
Заголовок сообщения: | поможите с переводом |
попался в руки 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, по-моему - вполне... правильно ли я перевёл? вопрос. а я сомневаюсь, тямы недостаёт. просветите темного. |
Автор: | dynamic-wind [ Вс авг 18, 2013 21:06 ] |
Заголовок сообщения: | Re: поможите с переводом |
Код: angularVelocity = ((double)(sensorValue-reference_Value)*4930.0)/1023.0/0.67; //get the angular velocity : av ( sv rv -- av ) - 7 * ; Приблизительно |
Автор: | chu [ Пт авг 17, 2018 10:25 ] |
Заголовок сообщения: | Re: поможите с переводом |
стесняюсь спросить соответствует ли Код: \ : 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 */ ? туплю( спасибо. |
Автор: | KPG [ Пт авг 17, 2018 13:51 ] |
Заголовок сообщения: | Re: поможите с переводом |
chu писал(а): ? Похоже на правду но в исходном тексте есть такая строчка "Initial value: 0xffff" P.S. Здесь crc16 так считается или вот ещё один вариант ... Гугль в помощь "crc16 forth" |
Автор: | chu [ Сб авг 18, 2018 08:53 ] |
Заголовок сообщения: | Re: поможите с переводом |
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. это допустимо? или гложут меня сомнения. отсюда Циклический избыточный код КАК ПОСЧИТАТЬ КОНТРОЛЬНУЮ СУММУ неочевидно |
Автор: | KPG [ Сб авг 18, 2018 11:51 ] |
Заголовок сообщения: | Re: поможите с переводом |
chu писал(а): беспокоит только наличие единички в старшем полуслове циклического избыточного кода Здесь после вычисления ещё делается один XOR и для CRC16 в этом алгоритме должно браться $8408 У меня по выше переведённой формуле в SPF4 получается число 0xE0CF8 на тестовой строке, 123456789 а в алгоритме с rosetta при замене константы на $8408 0x906E |
Автор: | chu [ Сб авг 18, 2018 12:16 ] |
Заголовок сообщения: | Re: поможите с переводом |
этих CRC алгоритмов великое множество. Элементарное руководство по CRC алгоритмам обнаружения ошибок но от того не легче напрягает фраза Цитата: Optimized CRC-CCITT calculation.
|
Автор: | KPG [ Сб авг 18, 2018 12:35 ] |
Заголовок сообщения: | Re: поможите с переводом |
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 |
Автор: | chu [ Сб авг 18, 2018 12:54 ] |
Заголовок сообщения: | Re: поможите с переводом |
KPG писал(а): Может ещё добавить приведение (uint16_t)data $ffff and не помогло в SPF4 (32bit) Код: >
Ok >S" 123456789" $crc w0x.r 0001 1352 Ok > |
Автор: | KPG [ Сб авг 18, 2018 13:03 ] |
Заголовок сообщения: | Re: поможите с переводом |
chu писал(а): KPG писал(а): Может ещё добавить приведение (uint16_t)data $ffff and не помогло А какое правильное число должно получится на строке 123456789 ? |
Автор: | chu [ Сб авг 18, 2018 13:20 ] |
Заголовок сообщения: | Re: поможите с переводом |
KPG писал(а): А какое правильное число должно получится на строке 123456789 ? кто бы знал Online CRC Calculator |
Автор: | chu [ Сб авг 18, 2018 13:43 ] |
Заголовок сообщения: | Re: поможите с переводом |
упс, наврал. в SPF4(32bit) Код: >S" 123456789" $crc w0x.r 0004 75A3 Ok > так же, как в mecrisp'e |
Автор: | KPG [ Сб авг 18, 2018 15:07 ] |
Заголовок сообщения: | Re: поможите с переводом |
chu писал(а): кто бы знал По С алгоритму отсюда возможен такой вариант Код: 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 ; |
Автор: | KPG [ Вс авг 19, 2018 08:23 ] |
Заголовок сообщения: | Re: поможите с переводом |
По такому коду (найдено в 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 |
Автор: | chu [ Вс авг 19, 2018 08:31 ] |
Заголовок сообщения: | Re: поможите с переводом |
KPG писал(а): возможен такой вариант соответствует. Online CRC Calculator в зависимости от значения init - либо CRC-16/CCITT-FALSE либо CRC-16/XMODEM |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |