El microcontrolador en las placas Arduino y Genuino tiene 512 bytes de: memoria EEPROM cuyos
valores se mantienen cuando la placa está apagada (como un pequeño disco
duro).
Una CRC es
una forma sencilla de comprobar si los datos han cambiado o de han dañado. En
este ejemplo se calcula un valor de CRC directamente en los valores de la
EEPROM. Esta CRC es como una
firma y cualquier cambio en el CRC calculado significa una modificación de
los datos almacenados. El
propósito de este ejemplo es poner de relieve cómo el objeto EEPROM se puede
utilizar como una matriz.
Hardware necesario
- Arduino o Genuino
No hay circuito para este ejemplo.
Esquema
Código
//Escrito por Christopher Andrews. algoritmo CRC generado por pycrc, licencia MIT
//(https://github.com/tpircher/pycrc).
//Una CRC es una forma sencilla de comprobar si los datos han cambiado o se han dañado.
//En este ejemplo se calcula un valor de CRC directamente en los valores de la
//'EEPROM'.
//El propósito de este ejemplo es poner de relieve cómo el objeto 'EEPROM' se puede
//utilizar como una matriz.
#include <Arduino.h>
#include <EEPROM.h>
void setup() {
//Inicia la comunicacion serie
Serial.begin(9600);
while (!Serial) {
; // espera a que el puerto serie se conecte. Necesario solo para el USB nativo
}
//Imprime la longitus de los datos para ejecutar en CRC.
Serial.print("Longitud EEPROM: ");
Serial.println(EEPROM.length());
//Imprime el resultado de la llamada a eeprom_crc()
Serial.print("Datos CRC32 de la EEPROM: 0x");
Serial.println(eeprom_crc(), HEX);
Serial.print("\n\nTerminado!");
}
void loop() {
/* Bucle vacio */
}
unsigned long eeprom_crc(void) {
const unsigned long crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac,
0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
};
unsigned long crc = ~0L;
for (int index = 0 ; index < EEPROM.length() ; ++index) {
crc = crc_table[(crc ^ EEPROM[index]) & 0x0f] ^ (crc >> 4);
crc = crc_table[(crc ^ (EEPROM[index] >> 4)) & 0x0f] ^ (crc >> 4);
crc = ~crc;
}
return crc;
}
No hay comentarios:
Publicar un comentario