Arduino:Примеры/EEPROMCrc: различия между версиями
Myagkij (обсуждение | вклад) м (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">») |
Нет описания правки |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 25: | Строка 25: | ||
==Код== | ==Код== | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/*** | /*** | ||
Автор – Кристофер Эндрюс (Christopher Andrews). | Автор – Кристофер Эндрюс (Christopher Andrews). | ||
Строка 98: | Строка 98: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Портал/Arduino}} | |||
[[Категория:Пример]] | [[Категория:Пример]] | ||
[[Категория:Примеры]] | [[Категория:Примеры]] | ||
[[Категория:Пример программирования Arduino]] | [[Категория:Пример программирования Arduino]] | ||
[[Категория:Примеры программирования Arduino]] | [[Категория:Примеры программирования Arduino]] |
Текущая версия от 12:33, 8 июля 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Проверка EEPROM-памяти по методу CRC[1]
Микроконтроллер на плате Arduino/Genuino имеет, как правило, 512 байт EEPROM-памяти (у моделей Uno и Mega ее объем составляет 1 Кб и 4 Кб соответственно) – она хранит информацию, даже если плата находится в выключенном состоянии. Другими словами, это что-то вроде крошечного жесткого диска.
CRC – это простой способ проверки, были ли данные изменены или повреждены. Это что-то вроде подписи, т.е. любое изменение CRC-значения означает, что сохраненные данные тоже изменились. Целью данного примера является показать, как объект EEPROM можно использовать в виде массива. В нем CRC-значение рассчитывается прямо на EEPROM-данных.
Необходимое оборудование
- Плата Arduino или Genuino
Цепь
Для этого примера цепь строить не нужно.
Схема
Код
/***
Автор – Кристофер Эндрюс (Christopher Andrews).
CRC-алгоритм генерируется CRC-калькулятором pycrc, лицензия MIT (https://github.com/tpircher/pycrc ).
CRC – это простой способ проверки, были ли данные изменены
или повреждены. Целью данного примера является показать, как объект
EEPROM можно использовать в виде массива. В нем CRC-значение
рассчитывается прямо на EEPROM-данных.
***/
#include <Arduino.h>
#include <EEPROM.h>
void setup() {
// запускаем последовательную коммуникацию:
Serial.begin(9600);
while (!Serial) {
; // ждем подключения последовательного порта (нужно только для плат со штатным USB-портом)
}
// Показываем объем данных, которые будут подвержены CRC-проверке:
Serial.print("EEPROM length: "); // "Объем данных: "
Serial.println(EEPROM.length());
// Показываем результат вызова функции eeprom_crc():
Serial.print("CRC32 of EEPROM data: 0x"); // "CRC32-значение EEPROM-данных: 0x"
Serial.println(eeprom_crc(), HEX);
Serial.print("\n\nDone!"); // "\n\nГотово!"
}
void 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.read()
- EEPROM library reference
- EEPROM Clear - Fills the content of the EEPROM memory with “0”.
- EEPROM Read – Reads values stored into EEPROM and prints them on Serial.
- EEPROM Write – Stores values read from A0 into EEPROM.
- EEPROM Iteration – Programming examples on how to go through the EEPROM memory locations.
- EEPROM Put – Put values in EEPROM using variable semantics (differs from EEPROM.write() ).
- EEPROM Get – Get values from EEPROM and prints as float on serial.
- EEPROM Update – Stores values read from A0 into EEPROM, writing the value only if different, to increase EEPROM life.
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino