有没有办法检测来自eeprom的首次访问
Is there a way to detect first time access from eeprom
环境
我正在为 atmega328p 上的 arduino
编写一个小游戏,我正试图从 eeprom
内存中保持 reading/writing 的高分。
但我不知道你如何检查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;
同时写入签名和高分的异或结果。当你阅读它时,你会将签名和高分的异或与 XORResult 进行比较。如果匹配,则说明您写入的数据不是随机的。
首先:
你不应该将高分写入EEPROM,它应该被视为read-only
回答你的问题:最好在高分中添加一些奇偶校验方式https://en.wikipedia.org/wiki/Parity_bit
如果您对电路板进行编程,您可以擦除 eeprom。这意味着所有字节都读为 0xFF
。如果您将高分存储为 BCD 或 ASCII(任何从不为您的数据使用 0xFF 的表示形式),您可以轻松检测高分是否是第一次写入。
环境
我正在为 atmega328p 上的 arduino
编写一个小游戏,我正试图从 eeprom
内存中保持 reading/writing 的高分。
但我不知道你如何检查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;
同时写入签名和高分的异或结果。当你阅读它时,你会将签名和高分的异或与 XORResult 进行比较。如果匹配,则说明您写入的数据不是随机的。
首先:
你不应该将高分写入EEPROM,它应该被视为read-only
回答你的问题:最好在高分中添加一些奇偶校验方式https://en.wikipedia.org/wiki/Parity_bit
如果您对电路板进行编程,您可以擦除 eeprom。这意味着所有字节都读为 0xFF
。如果您将高分存储为 BCD 或 ASCII(任何从不为您的数据使用 0xFF 的表示形式),您可以轻松检测高分是否是第一次写入。