Код
void do_crc_8(unsigned char byte, unsigned char *crc8)
{
unsigned char ctmp = (*crc8^byte);
*crc8 = crc_table[ctmp];
}
void write_AVR()
{
unsigned char crc8;
....
crc8=0;
for(itmp=0; itmp < sizeof(struct FHW_outs); itmp++)
{
while(!(AT91C_BASE_US1->US_CSR &AT91C_US_TXRDY));
AT91C_BASE_US1->US_THR=buf[itmp];
do_crc_8(buf[itmp], &crc8);// <<<----------------------------------------------!!!!
}
...
}
{
unsigned char ctmp = (*crc8^byte);
*crc8 = crc_table[ctmp];
}
void write_AVR()
{
unsigned char crc8;
....
crc8=0;
for(itmp=0; itmp < sizeof(struct FHW_outs); itmp++)
{
while(!(AT91C_BASE_US1->US_CSR &AT91C_US_TXRDY));
AT91C_BASE_US1->US_THR=buf[itmp];
do_crc_8(buf[itmp], &crc8);// <<<----------------------------------------------!!!!
}
...
}
После небольшой перемены проблема исчезла. В чем юмор я понять к сожалению не могу =)
Кстати, на IAR AVR эта-же функция в таком-же (первоначальном) виде работает нормально.
ИМХО бред какойто ) Что-то здесь не чисто =)
Код
unsigned char do_crc_8(unsigned char byte, unsigned char crc8)
{
unsigned char ctmp = (crc8^byte);
return (crc_table[ctmp]);
}
и вызов:
crc8 = do_crc_8(buf[itmp], crc8);
{
unsigned char ctmp = (crc8^byte);
return (crc_table[ctmp]);
}
и вызов:
crc8 = do_crc_8(buf[itmp], crc8);