|
Я использовал то что в ИАРе генериться автоматом(линкером) переменная: __checksum. Которую в проге использую так:
if (crc16_flash_prog() != (U16)__checksum)
{
transmit_msg("CRC_error! MUST RESET \r\n ");
Write_EEPROM(MAIN_PASSWORD_ADDRESS,0x0);
Write_EEPROM((MAIN_PASSWORD_ADDRESS+1),0x0);
while(1); // Сбрасваемся ВАТЧДОГОМ
}
// ПП для подсчета ЦРС программы.
U16 crc16_flash_prog(void)
{
U16 counter;
U16 crc = 0;
U8 __farflash *byte_pointer=0;
for( counter = 0; counter < ((U16)(&__checksum)); counter++)
crc = (crc<<8) ^ crc16tab[((crc>>8) ^ *(U8 __farflash *) byte_pointer++)&0x00FF];
return crc;
}
таблицу не привожу.
E-mail: info@telesys.ru