Вверх ↑
Ответов: 36
Рейтинг: 7
#1: 2011-04-19 15:04:34 ЛС | профиль | цитата
nesco, не поможешь вставить эту функцию как InlineCode, а то у меня ума не хватает.

Вот еще раз код с выводом промежуточных данных на терминал:

//buf - пакет данных (массив байт), data_byte - длина пакета
uint8 crc8(uint8*buf, uint8 data_byte)
{
uint8 crc=0x00;
uint8 data_bit=0x80;
uint8 i;

for(i=0;i<data_byte;i++)
printf("Buffer[%x] %x
",i,buf[i]);

while(data_byte>0)
{
if(((crc&0x01)!=0)!=((buf[data_byte]&data_bit)!=0))
{
crc>>=1;
printf("CRC>>=1---%x
",CRC);
crc^=0xCD;
printf("CRC^00xcd---%x
",CRC);
}
else crc>>=1;

data_bit>>=1;
printf("data_bit>>=1---%x
",data_bit);
if(!data_bit)
{
data_bit=0x80;
data_byte--;
printf("data_byte---%x
",data_byte);
}
}
return(crc);
}

вот что будет если массив состоит из одного элемента buf[0]=1:



да, можно и на дискретных элементах, но по-мойму кодом гораздо проще.
Только я Дельфи первый раз вижу и не дал ума как.

Спасибо

карма: 0

0