roboforum.ru

Технический форум по робототехнике.


Нужен исполнитель для написания кода CRC для ардуино

Предложение о работе и сотрудничестве на коммерческой основе

Нужен исполнитель для написания кода CRC для ардуино

Сообщение Levin150 » 20 июл 2014, 11:45

Привет всем .

Нужно написать два скетча и подробно расписать для подсчёта контрольной суммы CRC за вознаграждения , кому интересно пишите на почту. evgenzheka@qip.ru



Есть устройства которое читает данные с контрольной суммой.



Нужен код когда я изменяю любое значения , контрольная сумма рассчитывается
автоматически.





void setup() {

Serial.begin(19200);

}

void loop() {

Serial.write(62);

Serial.write(1);

Serial.write(7);

Serial.write(19);

Serial.write(83);

Serial.write(0);

Serial.write(252);

Serial.write(20);

Serial.write(183); // Контрольная сумма 100110001 P(x) = x8+ x5+ x4+ x0

delay(1000);

}





А во втором коде я не знаю по какой CRC она рассчитывается



void setup() {

Serial.begin(9600);
}

void loop() {

Serial.println("S1B2F02 A010540.00 C0165010.000 E0012143.0 G077.0 H1200 I+050 J060 K02220.0 L02221.0 M02222.0 N02223.0 O02224.0 P01000000 Z6CFE");

delay(1000);

}
Levin150
 
Сообщения: 1
Зарегистрирован: 20 июл 2014, 11:31

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение elmot » 28 июл 2014, 14:42

Опять АВР. Нет, чтобы взять нормальный контроллер с аппаратным CRC
трололо off
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение Madf » 28 июл 2014, 15:09

зато есть аппаратное шифрование :Р
Madf
 
Сообщения: 3232
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение Duhas » 28 июл 2014, 19:27

трололо on
не обобщаем, xmega = avr, crc аппаратное есть )
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение elmot » 29 июл 2014, 23:55

Duhas писал(а):трололо on
не обобщаем, xmega = avr, crc аппаратное есть )

А бывают ли ардуины на xmega'х?
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение Angel71 » 30 июл 2014, 00:16

и да и нет. из неофициального есть как минимум xmegaduino. официального вроде ничего небыло.
Аватара пользователя
Angel71
 
Сообщения: 10598
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение Duhas » 01 авг 2014, 10:27

elmot писал(а):А бывают ли ардуины на xmega'х?

не суть - был "наезд" на АВР а не на дуино) последние и на армах бывают )

ПС порой надоедает ваша пропаганда "нормальных" контроллеров.
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение Dmitry__ » 01 авг 2014, 17:59

А мне другое интересно, эти аппаратные crc считают любой полином? Если нет, то аппаратный crc на фиг не нужен...
Подсчет crc - стандартная задача для контроллера, на все стандартные задачи не напасешься аппаратных перделок.

Вот для crc8 шустрый способ, полином как у 1-wire dallas (кажись):
На сцы:
Код: Выделить всёРазвернуть
//******************************
void CalcCrc8 (unsigned char x)
{
  CrcCalc ^= x;
  x = 0;
  if (CrcCalc & 0x01) x ^= 0x5e;
  if (CrcCalc & 0x02) x ^= 0xbc;
  if (CrcCalc & 0x04) x ^= 0x61;
  if (CrcCalc & 0x08) x ^= 0xc2;
  if (CrcCalc & 0x10) x ^= 0x9d;
  if (CrcCalc & 0x20) x ^= 0x23;
  if (CrcCalc & 0x40) x ^= 0x46;
  if (CrcCalc & 0x80) x ^= 0x8c;
  CrcCalc = x;
}
//******************************


На асм avr:
Код: Выделить всёРазвернуть
CalcCrc8_temp1:
   eor   CrcCalc,temp1
   clr   temp1
   ldi   temp3,0x5e
   sbrc   CrcCalc,0
   eor   temp1,temp3
   ldi   temp3,0xbc
   sbrc   CrcCalc,1
   eor   temp1,temp3
   ldi   temp3,0x61
   sbrc   CrcCalc,2
   eor   temp1,temp3
   ldi   temp3,0xc2
   sbrc   CrcCalc,3
   eor   temp1,temp3   
   ldi   temp3,0x9d
   sbrc   CrcCalc,4
   eor   temp1,temp3   
   ldi   temp3,0x23
   sbrc   CrcCalc,5
   eor   temp1,temp3   
   ldi   temp3,0x46
   sbrc   CrcCalc,6
   eor   temp1,temp3   
   ldi   temp3,0x8c
   sbrc   CrcCalc,7
   eor   temp1,temp3   
   mov   CrcCalc,temp1
   ret


На асм pic:
Код: Выделить всёРазвернуть
CalcCrc8_w
   xorwf   CrcCalc,f
   movlw   0
   btfsc   CrcCalc,0
   xorlw   0x5e
   btfsc   CrcCalc,1
   xorlw   0xbc
   btfsc   CrcCalc,2
   xorlw   0x61
   btfsc   CrcCalc,3
   xorlw   0xc2   
   btfsc   CrcCalc,4
   xorlw   0x9d   
   btfsc   CrcCalc,5
   xorlw   0x23   
   btfsc   CrcCalc,6
   xorlw   0x46   
   btfsc   CrcCalc,7
   xorlw   0x8c   
   movwf   CrcCalc
   return


Ой, опять на pic код красивше avr :roll:


Считаем так для асм:
Код: Выделить всёРазвернуть
   clrf   CrcCalc    ;сбросить регистр crc
   movf   Buf1,w
   call   CalcCrc8_w
   movf   Buf1+1,w
   call   CalcCrc8_w
   movf   Buf1+2,w
   call   CalcCrc8_w
   movf   CrcCalc,w
   xorwf   Buf1+3,w
   btfss   STATUS,Z   ;ошибка crc
   goto   a0_0      ;
;crc верен



Для сцы:
Код: Выделить всёРазвернуть
     CrcCalc = 0;         //пересчитать CRC
     CalcCrc8(RxBuffer[2]);
     CalcCrc8(RxBuffer[3]);
     CalcCrc8(RxBuffer[4]);
     CalcCrc8(RxBuffer[5]);
     CalcCrc8(RxBuffer[6]);
     CalcCrc8(RxBuffer[7]);
     CalcCrc8(RxBuffer[8]);
     CalcCrc8(RxBuffer[9]);
     CalcCrc8(RxBuffer[10]);
     CalcCrc8(RxBuffer[11]);
     CalcCrc8(RxBuffer[12]);


Таблица весов получается так:
Код: Выделить всёРазвернуть
Возмите степени двойки: 1,2,4... и прогоните через пример от производителя -> получите таблицу весов разрядов.
;1=0x31
;2=0x62
;4=0xC4
;8=0xB9
;16=0x43
;32=0x86
;64=0x3D
;128=0x7A


По поиску в гугле "Возмите степени двойки: 1,2,4... и прогоните через пример", найдете источник...

и.т.д. и.т.п.
Аватара пользователя
Dmitry__
 
Сообщения: 7962
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение Aseris » 01 авг 2014, 18:19

А так не кошерно?, под любой полином и буфер, чесно слямзено в нете и допилено, когдато давно

Код: Выделить всёРазвернуть
/*******************************************************************************
* Function CalcCrc8
*
* input  - buffer pointer and length
* output - 8 bit CRC
*
* Polinomial  X^8+X5+X^4+1   = 0x131, but use only 0x31,
*                                           why see CRC explanation in web.
*
* NOTE: Lazy, not preformance optimal implementation
*******************************************************************************/

#define CRC8_POLYNOM  0x31

unsigned char CalcCrc8(unsigned char *pcBlock, unsigned long len)
{
    unsigned char crc = 0xFF;
    unsigned long i;

    while (len--)
    {
        crc ^= *pcBlock++;

        for (i = 0; i < 8; i++)
        {
            crc = crc & 0x80 ? (crc << 1) ^ CRC8_POLYNOM : crc << 1; /*test bit 7, if 1 do xor and shift, if 0 do only shift */
        }
    }

    return crc;
}


Добавлено спустя 5 минут 41 секунду:
Хотя из задачи ТС, я понял что он полином хочет найти из 2 последовательности, вобщем задача криво поставлена
Последний раз редактировалось Aseris 01 авг 2014, 18:21, всего редактировалось 1 раз.
Аватара пользователя
Aseris
 
Сообщения: 1142
Зарегистрирован: 01 сен 2009, 14:58
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение Dmitry__ » 01 авг 2014, 18:22

Aseris писал(а):А так не кошерно?


Кошерно, но очень долго.

Добавлено спустя 1 минуту 46 секунд:
откомпили и посмотри какой будет быдлокод.
Аватара пользователя
Dmitry__
 
Сообщения: 7962
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение elmot » 01 авг 2014, 22:54

Dmitry__ писал(а):А мне другое интересно, эти аппаратные crc считают любой полином? Если нет, то аппаратный crc на фиг не нужен...
Подсчет crc - стандартная задача для контроллера, на все стандартные задачи не напасешься аппаратных перделок.


STM32F07x:
5.2 CRC main features
• Uses CRC-32 (Ethernet) polynomial: 0x4C11DB7
X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X +1
• Alternatively uses a fully programmable polynomial with programmable size (7, 8, 16,
32 bits) (STM32F07x devices only)
• Handles 8-,16-, 32-bit data size
• Programmable CRC initial value
• Single input/output 32-bit data register
• Input buffer to avoid bus stall during calculation
• CRC computation done in 4 AHB clock cycles (HCLK) for 32-bit data
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение Dmitry__ » 01 авг 2014, 23:28

Посмотрел RM0316, Cyclic redundancy check calculation unit (CRC)
А как же CRC-4-ITU, CRC-5-EPC, CRC-6-ITU, CRC-64-ISO, CRC-128, CRC-256 ???

Programmable polynomial size (7, 8, 16, 32 bit) - всего 4 размерности, ваще бред.

Нет в жизне щастя :)
Аватара пользователя
Dmitry__
 
Сообщения: 7962
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение Duhas » 02 авг 2014, 08:08

идеального МК на все случаи жизни не будет никогда, для каждого своя задача и свои требования.. и то что теперь для многих задач удобнее работать на тех же STM не говорит об ущербности AVR
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение elmot » 02 авг 2014, 08:38

причем тут ущербность? просто авры 8бит устарели уже очень давно. кста, я разговаривал с бывшим разработчиком авров. Он сказал, что год назад закрылся их R&D центр по восьмибитникам. только продаваны остались. т.е. новых 8бит авров уже не будет.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Нужен исполнитель для написания кода CRC для ардуино

Сообщение Madf » 02 авг 2014, 08:55

зачем нам новые, в той области в которой они используются - достаточно
да и китайцы ещё ой как долго будут на этом делать деньги
это всё называется - маркетинг или кто-то хочет денег (представляя нам новую продукцию)
Madf
 
Сообщения: 3232
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

След.

Вернуться в Вакансии/Работа/Трудоустройство/Заказы

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

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

Mail.ru counter