Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вычисление CRC16 линкером IAR-а
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Baser
Кто нибудь пробовал в ИАРе АВР 4.21 вычислять линкером CRC16 кода с начальным значением CRC не равным нулю?
При начальном значении CRC = 0 все нормально, и прямой и реверсный полином 1021 вычисляются так же как и общеизвестные процедуры подсчета CRC. Стоит добавить опцию init - задать начальное значение (напр. 0xffff), совпадений больше не наблюдается.
Проверяю так:
Код
__root __farflash unsigned long Val @ 0x1DFF8 = 0xa4a3a2a1;

Начальное значение полинома:
Код
-J2,crc16,m,,,2,ffff=(CODE)(_..X_APPFLASH_END-7)-(_..X_APPFLASH_END-4)

И в отладчике проверяю результат работы стандартных процедур.

Ето я чего-то не понимаю, или в ИАРе глюк?
Baser
Никто не ответил, придется самому себе отвечать smile.gif
Предыдущий пост написал, а через полчаса в голову пришла бредовая идея, которая оказалась правильной.

ИАР своеобразно трактует термин начальное значение CRC. В хелпе по линкеру на опцию -J сказано:
Цитата
init
By default, the initial value of the checksum is 0. If you need to change the initial value, supply a different value for init.

Однако, если изменить это значение, например на FFFF, то линкер действует так:
1. Очищает начальное значение CRC = 0;
2. Производит вычисление CRC по стандартному алгоритму для нужного полинома для 2 байт со значением 0xFF;
3. Начинает вычислять CRC для заданного диапазона памяти.

Разумеется, значение CRC после шага 2 совсем не равно FFFF.
Ну и полученная окончательная CRC не имеет ничего общего с тем, что ожидалось. 07.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.