Часто необходимо приведение типа внутри кода (это CRC8):
Код
char wk_crc8_block(const char *datablock, const unsigned int count_byte)
{
register unsigned int count;
char crc1, ch;
crc1 = (char)CRC_WAKE_INIT;
for(count = 0; count < count_byte; count++)
{
ch = (char)datablock[count];
Do_Crc8(ch, &crc1);
}
crc1 = (char)crc1;
return(crc1);
}
void Do_Crc8(char b, char *crc)
{
int i;
for (i = 0; i < 8; i++)
{
if (((b ^ *crc) & 1) != 0)
*crc = (char)(((*crc ^ 0x18) >> 1) | 0x80);
else
*crc = (char)((*crc >> 1) & ~0x80);
b = (char)(b >> 1);
}
}
Без явного приведения типа к (char) для AVR -все в порядке, а на PC и freescale MC56F8346 полный бред.
Компилятор любит использовать размер данные "родной" для платформы (AVR - 8 бит, Freescale - 16, PC - 32).
Наука изощряет ум; ученье вострит память. Козьма Прутков