Цитата(_Артём_ @ Dec 4 2014, 18:35)

Тогда лучше использовать подсчёт CRC через команду NVM-контроллера Flash range CRC - оно само подсчитает.
Так будет использоваться тот же самый хардварный генератор. А он выдаёт не то.
Совпадение калькулятора и генератора, похоже, было случайным. Совпадают только значения, генерируемые из массива [32] = {0xFF}
Делаю вывод, что хардварный генератор нерабочий.
Странно, что этого нет в эррате.
При возможности проверю на другом контроллере, отпишусь.
Ещё интересный нюанс относительно приведённого в сообщении 6 кода:
Код
crc = crc & 1 ? (crc >> 1) ^ 0xEDB88320UL : crc >> 1;
Visual studio ругнулась тут на невозможность привести int к bool, и я ничтоже сумняшеся привёл код к виду
Код
for (j = 0; j < 8; j++)
{
if ((crc & 1) == 1)
{
crc = (crc >> 1) ^ 0xedb88320u;
}
else
{
crc = (crc >>
};
crc_table[i] = crc;
тем более что так это реализовано в библиотеке, которую я использовал для PC.
Компилятор для Атмеги (работаю в CVAVR) на эту строку не ругнулся.
Но если не привести код к тому же виду, результат получается РАЗНЫЙ.