Среда
Я пишу небольшую игру для arduino
на atmega328p, и я пытаюсь сохранить рекорд путем чтения / записи из eeprom
объем памяти.
Но я не знаю, как вы можете проверить, если данные в eeprom
это правильный рекорд или некоторые случайные данные.
Вопрос
Есть ли способ, которым вы можете обнаружить, если данные в eeprom
является частью программы или вручную сбросить его на определенное значение в Atmel Studio
/ Arduino IDE
?
Вы всегда можете попробовать написать небольшую структуру, подобную этой:
struct
{
uint32_t Signature;
uint32_t HighScore;
}EEPROMData;
Вы устанавливаете сигнатуру в известном жестко заданном значении, устанавливаете рекорд и записываете всю структуру. При прочтении вы бы проверили подпись. Маловероятно, что это будет ваша ценность.
Если вам нужна дополнительная страховка, это не просто случайные данные, вы можете сделать это:
struct
{
uint32_t Signature;
uint32_t HighScore;
uint32_t XORRResult;
}EEPROMData;
а также записать результат XOR между подписью и рекордом. когда вы читаете его, вы сравниваете xor из сигнатуры и рекорда с XORResult. Если это соответствует, то вы записали эти данные, не случайно.
Если вы запрограммируете свою доску, вы можете стереть eeprom. Это будет означать, что все байты читаются как 0xFF
, Если вы сохраните свой рекорд как BCD или ASCII (любое представление, которое никогда не использует 0xFF для ваших данных), вы можете легко определить, записан ли рекорд в первый раз.
Прежде всего:
Вы не должны записывать рекорды в EEPROM, это должно рассматриваться как доступное только для чтения
Чтобы ответить на ваш вопрос: вероятно, лучше добавить какой-либо способ проверки на четность к рекорду https://en.wikipedia.org/wiki/Parity_bit