INNER CODE UNIT · C
init_checksum
dmitrystu/sboot_stm32 · src/checksum.c:66
static void init_checksum(checksum_t *checksum) {
for (int j = 0; j < 256; j++) {
uint64_t cs = j;
for (int i = 0; i < 8; i++) {
if (cs & 0x01) {
cs = (cs >> 1) ^ CRC_POLY;
} else {
cs = (cs >> 1);
}
}
table[j] = cs;
}
*checksum = CRC_INIT;
}
static void update_checksum(checksum_t *checksum, uint8_t data) {
data ^= *checksum & 0xFF;
*checksum = (*checksum >> 8) ^ table[data];