typische C-Implementierung. Die Funktionen müssen extern aufgerufen werden. Die Prüfsumme muss mit dem
Startwert vorbelegt werden.
//----------------------------------------------------------------------------
//Funktion: buffer2crc16()
//input:
ptr Datum, ptr auf CRC, Blocklänge
//output:
---
//Beschr:
CRC-CCITT eines Speicherbereichs
//----------------------------------------------------------------------------
void
buffer2crc16(UBYTE
{
while(anz--)
crc16(*dat++, pCRC);
}
//----------------------------------------------------------------------------
//Funktion: sp_crc16()
//input:
Datum, ptr auf CRC
//output:
---
//Beschr:
CRC_CCITT (x^16+x^12+x^5+1 = 1 0001 0000 0010 0001 = 0x1021
//----------------------------------------------------------------------------
void
crc16
(UBYTE
dat,
{
register
UINT16
lcrc = *crc;
lcrc = (lcrc >> 8) | (lcrc << 8);
lcrc ^= dat;
lcrc ^= (lcrc & 0xFF) >> 4;
lcrc ^= lcrc << 12;
lcrc ^= (lcrc & 0xFF) << 5;
*crc = lcrc;
}
Printing and typographical errors reserved.
ELECTRONIC ASSEMBLY reserves the right to change specification without prior note.
EA uniTFT-Serie
*dat,
UINT16
*pCRC,
volatile
UINT16
* crc)
UINT32
anz)
20 / 256