https://github.com/xaviermerino/ECE1552/tree/master/CRC-3
Lab Task #1
You are a detective. You have received the latest intelligence data on the target. The messages might have changed unintentionally when traveling through the network. You must implement CRC-3 to discover if the data you’ve obtained is error-free. Your polynomial is x^3 + x + 1
. Each message is at most 29 bits long. Good luck!
This is what you are given:
unsigned int polynomial = 11;
unsigned int data[3] = {23, 80, 13548};
unsigned int crc[3] = {6, 4, 4};
The variable polynomial
is the decimal representation of x^3 + x + 1
. The array data
contains information about latitude, longitude, and elevation of the target. The array crc
contains the original calculated CRC-3 for the data.
Go through the data
array and calculate the CRC-3 for each item in the array. Compare your calculation with the provided one in the crc
array. Print [OK]
or [FAILED]
accordingly. If the calculations do not match, print the calculated CRC and expected CRC. Print the steps required to get to the calculated CRC.
In order to calculate the CRC-3 we are going to create a function crc3()
. This function returns the check
value of the CRC-3. We use printSteps
to aide in our debugging. When set to true
, it prints the binary steps.
The following function prototype is given:
unsigned int crc3(unsigned int binary, unsigned int polynomial, bool printSteps = false);
Example output is shown below for reference.
Latitude: 23 [FAILED]
Calculated CRC: 3
Expected CRC: 6
10111000
10110000
--------
00001000
00001000
00001011
--------
00000011
Longitude: 80 [FAILED]
Calculated CRC: 5
Expected CRC: 4
1010000000
1011000000
----------
0001000000
0001000000
0001011000
----------
0000011000
0000011000
0000010110
----------
0000001110
0000001110
0000001011
----------
0000000101
Elevation: 13548 [OK]
11010011101100000
10110000000000000
-----------------
01100011101100000
01100011101100000
01011000000000000
-----------------
00111011101100000
00111011101100000
00101100000000000
-----------------
00010111101100000
00010111101100000
00010110000000000
-----------------
00000001101100000
00000001101100000
00000001011000000
-----------------
00000000110100000
00000000110100000
00000000101100000
-----------------
00000000011000000
00000000011000000
00000000010110000
-----------------
00000000001110000
00000000001110000
00000000001011000
-----------------
00000000000101000
00000000000101000
00000000000101100
-----------------
00000000000000100