Added CRC assignment.
This commit is contained in:
parent
e8cf6d8b60
commit
41c3674fa2
BIN
1/ISO/assignments/crc-32/crc-32.pdf
Normal file
BIN
1/ISO/assignments/crc-32/crc-32.pdf
Normal file
Binary file not shown.
39
1/ISO/assignments/crc-32/crc-32.tex
Normal file
39
1/ISO/assignments/crc-32/crc-32.tex
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
\documentclass[12pt,a4paper]{article}
|
||||||
|
\usepackage[spanish]{babel}
|
||||||
|
|
||||||
|
\title{Cyclic Redundancy Check}
|
||||||
|
\author{Nicolás A. Ortega}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
\maketitle
|
||||||
|
La CRC es un código usado para detectar errores que se suele usar en redes
|
||||||
|
digitales y dispositivos de almacenamiento. Funciona cogiendo el resto de una
|
||||||
|
división polinómica. De esta manera, los cálculos se repiten y si la prueba no
|
||||||
|
concuerda con los anteriores, se hacen correcciones para prevenir corrupción de
|
||||||
|
datos.
|
||||||
|
|
||||||
|
Es muy popular ya que es simple de implementar en hardware binario y bastante
|
||||||
|
bueno en la detección de errores comunes causadas por ruido.
|
||||||
|
|
||||||
|
La CRC-32 es un variante del CRC que guarda el código CRC en un variable de 32
|
||||||
|
bits. En C se implementaría de la manera siguiente:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
uint32_t CRC32(const uint8_t data[], size_t data_length)
|
||||||
|
{
|
||||||
|
uint32_t crc32 = 0xFFFFFFFFu;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < data_length; i++)
|
||||||
|
{
|
||||||
|
const uint32_t lookupIndex = (crc32 ^ data[i]) & 0xff;
|
||||||
|
crc32 = (crc32 >> 8) ^ CRCTable[lookupIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
crc32 ^= 0xFFFFFFFFu;
|
||||||
|
return crc32;
|
||||||
|
}
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
\end{document}
|
Loading…
Reference in New Issue
Block a user