aboutsummaryrefslogtreecommitdiff
path: root/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino
diff options
context:
space:
mode:
authorChris--A <chris@genx.biz>2015-03-17 17:17:08 +1000
committerChris--A <chris@genx.biz>2015-03-17 17:17:08 +1000
commitdd1ec9920b8fd6b445cdcc943f53333990b34428 (patch)
tree39b5eb049080a2ed61e773a537e02ec503ddef9a /libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino
parent46e810cf0743a7fb29d41c02c5ab6c2d9e50685b (diff)
Added additional examples to EEPROM lib
Diffstat (limited to 'libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino')
-rw-r--r--libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino47
1 files changed, 47 insertions, 0 deletions
diff --git a/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino b/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino
new file mode 100644
index 0000000..40b08bd
--- /dev/null
+++ b/libraries/EEPROM/examples/eeprom_crc/eeprom_crc.ino
@@ -0,0 +1,47 @@
+/***
+ Written by Christopher Andrews.
+ CRC algorithm generated by pycrc, MIT licence ( https://github.com/tpircher/pycrc ).
+
+ A CRC is a simple way of checking whether data has changed or become corrupted.
+ This example calculates a CRC value directly on the EEPROM values.
+ The purpose of this example is to highlight how the EEPROM object can be used just like an array.
+***/
+
+#include <Arduino.h>
+#include <EEPROM.h>
+
+void setup(){
+
+ //Start serial
+ Serial.begin(9600);
+
+ //Print length of data to run CRC on.
+ Serial.print( "EEPROM length: " );
+ Serial.println( EEPROM.length() );
+
+ //Print the result of calling eeprom_crc()
+ Serial.print( "CRC32 of EEPROM data: 0x" );
+ Serial.println( eeprom_crc(), HEX );
+ Serial.print( "\n\nDone!" );
+}
+
+void loop(){ /* Empty loop */ }
+
+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 < 32 ; ++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 newline at end of file