Есть ли способ обнаружить в первый раз доступ из EEPROM

Среда

Я пишу небольшую игру для arduino на atmega328p, и я пытаюсь сохранить рекорд путем чтения / записи из eeprom объем памяти.

Но я не знаю, как вы можете проверить, если данные в eeprom это правильный рекорд или некоторые случайные данные.

Вопрос

Есть ли способ, которым вы можете обнаружить, если данные в eeprom является частью программы или вручную сбросить его на определенное значение в Atmel Studio / Arduino IDE?

0

Решение

Вы всегда можете попробовать написать небольшую структуру, подобную этой:

struct
{
uint32_t Signature;
uint32_t HighScore;
}EEPROMData;

Вы устанавливаете сигнатуру в известном жестко заданном значении, устанавливаете рекорд и записываете всю структуру. При прочтении вы бы проверили подпись. Маловероятно, что это будет ваша ценность.

Если вам нужна дополнительная страховка, это не просто случайные данные, вы можете сделать это:

struct
{
uint32_t Signature;
uint32_t HighScore;
uint32_t XORRResult;
}EEPROMData;

а также записать результат XOR между подписью и рекордом. когда вы читаете его, вы сравниваете xor из сигнатуры и рекорда с XORResult. Если это соответствует, то вы записали эти данные, не случайно.

2

Другие решения

Если вы запрограммируете свою доску, вы можете стереть eeprom. Это будет означать, что все байты читаются как 0xFF, Если вы сохраните свой рекорд как BCD или ASCII (любое представление, которое никогда не использует 0xFF для ваших данных), вы можете легко определить, записан ли рекорд в первый раз.

2

Прежде всего:

Вы не должны записывать рекорды в EEPROM, это должно рассматриваться как доступное только для чтения

Чтобы ответить на ваш вопрос: вероятно, лучше добавить какой-либо способ проверки на четность к рекорду https://en.wikipedia.org/wiki/Parity_bit

0
По вопросам рекламы [email protected]