Микроконтроллер на платах Arduino и Genuino имеют постоянную EEPROM: память, значения которой сохраняются при выключении питания платы (по принципу жесткого диска).
CRC или контрольная сумма представляет собой простой способ проверки данных. Данные проверяются на изменение или повреждение. В этом примере вычисляется значение CRC для конкретных значений EEPROM. Этот CRC подобен подписи. Если контрольная сумма изменилась, относительно ранее вычисленной, значит данные были изменены или повреждены. Цель этого примера — показать, что объект EEPROM может использоваться как массив.
Требуемое оборудование
Плата Arduino или Genuino
Требуемая схема
Нет схемы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
/*** 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); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } //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 < 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; } |
Смотрите также:
EEPROM Clear: очистить байты в EEPROM.
EEPROM Read: Чтение EEPROM и отправка его значений на компьютер.
EEPROM Write: Сохраняет значения с аналогового входа в EEPROM.
EEPROM Get: Считывание данных с EEPROM и их вывод на монитор порта в виде числа с плавающей точкой float.
EEPROM Iteration: Несколько разных способов пройти через пространство памяти EEPROM.
EEPROM Put: Запись данных в EEPROM разными способами.
EEPROM Update: Запись в EEPROM данных, считанных с 0-ого аналогового контакта (A0). Запись осуществляется только в том случае, если новые данные отличаются от предыдущих – это позволяет увеличить срок службы EEPROM.