EEPROM хранение, использование, восстановление данных
- Войдите на сайт для отправки комментариев
Чт, 16/03/2017 - 08:55
Добрый день уважаемые!
Задача хранить данные в EEPROM c проверкой целостности и возможностью восстановления.
Кто и как решает применительно к ардуино nano?
Что-то у меня проще, чем тройная избыточность не получается.
На дискетах всё было просто, пишем посекторно, делаем XOR для двух секторов и пишем в третий, а здесь как?
поделите ееепром на три сектора.
реализация crc32 для ардуины есть в сети.
да мне нужно то от силы байт 8, но железобетонных, хотелось бы попроще решить
Нашёл такой код, вопрос как его применить и не убъёт ли он всю динамическую память?
Word MakeCRC16Table(void) { Word r; for(int i=0; i<256; i++) { r = ((Word)i)<<8; for(byte j=0; j<8; j++) { if(r&(1<<15)) r=(r<<1)^0x8005; else r=r<<1; } crctable[i]=r; } } Код для расчёта CRC: Word GetCRC16(byte *buf, Word len) { Word crc; crc = 0xFFFF; while(len--) { crc = crctable[((crc>>8)^*buf++)&0xFF] ^ (crc<<8); } crc ^= 0xFFFF; return crc; }в институте еще писал программу для расчета надежности передачи данных с помощью https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%A0%D0%B8%D0%B4%D0%B0_%E2%80%94_%D0%A1%D0%BE%D0%BB%D0%BE%D0%BC%D0%BE%D0%BD%D0%B0 доволно неплохие результаты показывало даже на таблице 4Х4 бйта и три проверочных.
при одинарной ошибке в любом месте матрицы исравление 100%, при двойной 97%, при тройной 89%, дальше не помню, т.е. если считать грубо на нужные тебе 2 байта, надо хранить еще пять проверочных, остальное чистая математика.
Нашёл такой код, вопрос как его применить и не убъёт ли он всю динамическую память?
Не нужно убивать динамическую память, она хорошая. Делаете что-то вроде такого
#include <util/crc16.h> // Calculate 8-bit CRC-CCITT with using _crc8_ccitt_update() from AVRLib uint8_t crc8 (uint8_t *_src, uint8_t _len) { uint8_t inbyte; uint8_t crc = 0xFF; while (_len) { _len--; inbyte = *_src++; crc = _crc8_ccitt_update(crc, inbyte); } // end of while return crc; } // end of crc8И считаете, считаете... CRC-16 для 8 байт излишне, CRC-8 вполне хватит.
в институте еще писал программу для расчета надежности передачи данных с помощью https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%B4_%D0%A0%D0%B8%D0%B4%D0%B0_%E2%80%94_%D0%A1%D0%BE%D0%BB%D0%BE%D0%BC%D0%BE%D0%BD%D0%B0 доволно неплохие результаты показывало даже на таблице 4Х4 бйта и три проверочных.
при одинарной ошибке в любом месте матрицы исравление 100%, при двойной 97%, при тройной 89%, дальше не помню, т.е. если считать грубо на нужные тебе 2 байта, надо хранить еще пять проверочных, остальное чистая математика.
а я думал уже так сделать: D1, D2, XOR_D1_D2,XOR_D1_A5,XOR_D2_A5
Получается 3 байта если 5 то дополнить XOR_D1_F6,XOR_D2_F6
Это уже 10 кратный запас по надёжности, вопрос только как раскидывать по памяти? чтобы RAS-CAS не пересекались
ты же говоришь, что всего надо 8 байт+проверочные, если больше ничего хранить не надо, делим остаток памяти на это количество байтов и в цикле переписываем на знакомые нам адреса, т.е дублируем на новое место- это еще один плюс к надежности.
При такой избыточности хотелось бы иметь решение 100% восстановления исходных данных, я об этом, может быть я недооцениваю надёжность EEPROM )))
прицепи флешку и, еще туда, тогда периодически пиши :)
еще вай-фай модуль и на сервер данные слать, сервер на платном облаке, а оттуда комп забирает и на два жестких в зеркале диска пишет.во как!:))))))
А сбоку товарища майора посадить с журналом регистрации.
еще вай-фай модуль и на сервер данные слать, сервер на платном облаке, а оттуда комп забирает и на два жестких в зеркале диска пишет.во как!:))))))
та это всё есть, только не зеркало а раид 6 с хотфиксом )))
мне бы с EEPROM разобраться
Создаётся впечатление, что никто и никак не решает, вечный русский авось )))