Цитата(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 прошивки?