The error was:
print-802_15_4.c:442:9: runtime error: implicit conversion from type
'int' of value
15840046 (32-bit, signed) to type 'uint16_t' (aka
'unsigned short') changed the value to 45870 (16-bit, unsigned)
Proposal of fix by Guy Harris:
"Those shifted values will be converted (in the C abstract machine) to
int, but they'll all be in the range 0 to 65535, as will be the XOR of
all 4 of them; converting that to a uint16_t isn't undefined behavior."
/* Update CRC */
x = crc >> 8 ^ y;
x ^= x >> 4;
- crc = (crc << 8) ^
- ((unsigned short)(x << 12)) ^
- ((unsigned short)(x <<5)) ^
- ((unsigned short)x);
+ crc = ((uint16_t)(crc << 8)) ^
+ ((uint16_t)(x << 12)) ^
+ ((uint16_t)(x << 5)) ^
+ ((uint16_t)x);
data_len--;
}
/* Reverse bits on output */