C++ 是否有方法检测eeprom的首次访问

C++ 是否有方法检测eeprom的首次访问,c++,arduino,atmega,C++,Arduino,Atmega,环境 我正在为atmega328p上的arduino编写一个小游戏,我试图通过从eeprom内存读/写来保持高分 但是我不知道如何检查eeprom中的数据是正确的高分还是一些随机数据 问题 是否有一种方法可以检测eeprom中的数据是否是程序的一部分,或者手动将其重置为Atmel Studio中的特定值?Arduino IDE?您可以尝试编写如下小结构: struct { uint32_t Signature; uint32_t HighScore; }EEPROMData; 将签名设置为已知

环境

我正在为atmega328p上的
arduino
编写一个小游戏,我试图通过从
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;

并在签名和highscore之间写入XOR结果。当您阅读它时,您会将签名和highscore中的xor与XORResult进行比较。如果匹配,那么您编写的数据不是随机的。

您可以尝试编写如下小结构:

struct
{
uint32_t Signature;
uint32_t HighScore;
}EEPROMData;
将签名设置为已知的硬编码值,设置高分,然后写入整个结构。阅读时,你会检查签名。这不太可能是你的价值

如果您需要更多保险,这不仅仅是随机数据,您可以这样做:

struct
{
uint32_t Signature;
uint32_t HighScore;
uint32_t XORRResult;
}EEPROMData;
并在签名和highscore之间写入XOR结果。当您阅读它时,您会将签名和highscore中的xor与XORResult进行比较。如果匹配,那么您写入的数据不是随机的。

首先:

不应将高分写入EEPROM,应将其视为只读

回答您的问题:首先,最好在高分中添加一些奇偶校验方法:

不应将高分写入EEPROM,应将其视为只读


回答您的问题:最好在highscore中添加一些奇偶校验方式

如果您对电路板进行编程,则可以擦除eeprom。这意味着所有字节都被读取为
0xFF
。如果将高分存储为BCD或ASCII(任何从不使用0xFF表示数据的表示形式),则可以轻松检测高分是否第一次写入。

如果对电路板进行编程,则可以擦除eeprom。这意味着所有字节都被读取为
0xFF
。如果您将高分存储为BCD或ASCII(任何从不使用0xFF表示数据的表示形式),您可以轻松检测高分是否是第一次写入的。

您是否检查了CRC?除了高分,还将CRC16/8放入EEPROM以获得高分。读取后,从高分计算CRC,并与EEPROM存储的CRC进行比较。您检查了CRC吗?除了高分,还将CRC16/8放入EEPROM以获得高分。读取后,从高分计算CRC,并与EEPROM存储的CRC进行比较。