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

 
 
> И снова про 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
spf
сообщение Dec 12 2007, 16:28
Сообщение #3


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

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



Цитата(rezident @ Dec 12 2007, 20:17) *
Во-первых, не обязательно иметь таблицу для подсчета CRC16. Есть и безтабличныей алгоритм.

Это понятно, не написал, что тогда вычисление контрольной суммы всего кода длится недопустимо долго (разбивать на несколько вызовов не предлагать, это уже сделано). Знаю, что есть вариант формирования таблицы в памяти, память есть, но хочется, чтобы была одна функция для подсчета CRC.

Цитата
Во-вторых, что именно вы пытались посчитать с помощью IAR? CRC прошивки?

Да, CRC прошивки, всей flash-памяти.


--------------------
"Как много есть на свете вещей, которые мне не нужны!" Сократ
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 10:13
Рейтинг@Mail.ru


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