реклама на сайте
подробности

 
 
> И снова про CRC, Что надо сказать IAR-у, чтобы он считал CRC как для пакетов MODBUS?
spf
сообщение Dec 12 2007, 07:05
Сообщение #1


Странник
****

Группа: Свой
Сообщений: 766
Регистрация: 29-08-05
Из: Екатеринбург
Пользователь №: 8 051



Привет!

Как работает пример получения CRC кода понятно, все работает.

В боевом коде программы имеются функции по работе с пакетами Modbus (вычисление CRC).
Заставить IAR посчитать CRC так же, как считает проверенная функция вычисления CRC для Modbus
не удалось. Может кто-то это прошел?

Не хотелось бы иметь две таблицы для расчета CRC.

PS: IAR 3.42 (MSP430)


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Dec 12 2007, 15:17
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(spf @ Dec 12 2007, 12:05) *
Привет!

Как работает пример получения CRC кода понятно, все работает.

В боевом коде программы имеются функции по работе с пакетами Modbus (вычисление CRC).
Заставить IAR посчитать CRC так же, как считает проверенная функция вычисления CRC для Modbus
не удалось. Может кто-то это прошел?

Не хотелось бы иметь две таблицы для расчета CRC.

PS: IAR 3.42 (MSP430)

Во-первых, не обязательно иметь таблицу для подсчета CRC16. Есть и безтабличныей алгоритм.
Код
//==============================================//
// Функция подсчета СRC16 по алгоритму          //
//----------------------------------------------//
//аргументы: указатель на буфер,                //
//           размер буфера,                     //
//           стартовое значение СRC16           //
//возвращает:подсчитанное значение СRC16        //
//----------------------------------------------//
//ВНИМАНИЕ! Стартовому значению CRC16 необходимо//
//          присвоить значение 0xFFFF,          //
//          размер массива для подсчета CRC16   //
//          не более 65535 байт                 //
//==============================================//
#ifndef _POLINOME_CRC16_
  #define _POLINOME_CRC16_  0xA001
#endif

xWord f_CRC16Calc(xByte *buf, xWord sizeBuf, xWord crc)
{ xWord i, j;
  for(i=0;i<sizeBuf;i++)
  { crc=crc^buf[i];
    for (j=0;j<8;j++)
    { if ((crc&0x0001)!=0x0000) crc=(crc>>1)^_POLINOME_CRC16_;
      else crc>>=1;
    }
  }
  return (crc);
}

Во-вторых, что именно вы пытались посчитать с помощью IAR? CRC прошивки?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th August 2025 - 17:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016