(mcu上电后)读取eeprom数据并进行 格式转化时,char 转long 出现的问题

img


img


long 类型变量motor_running_times 一秒自加一次,并写入eeprom,断电后会重新读取eeprom里面的数据,并继续执行一秒加一次,并打印出来
上面面函数是 断电重新上电后 会读取EEPROM,此时读取的数值和我存入的数据是一样的,但是我把读取到的数组里面的char 类型整合成long 并重新赋值到motor_running_times ,优势会出现错误,例如:读取eeprom里面的数组里面的数是:“55 00 00 00 A9 ”;当我把后面四个类型整理成long 类型时,有时候前面三个数字会变成 “前三个FF和一个 A9”(因大小端问题,所以图片上面显示的是“A9加3个FF ”这个没影响),最后一个数字是对的,但前面三个全都变成FF了,但是有时候上电读取的数据,和char整理成long型是对的,但有时候出现错误,这是什么原因呢? eeprom读的数据每次都是对的,就是转化成long类型时有时会出现问题

数组是 char 型,

参考GPT和自己的思路:

首先,从您提供的信息来看,这个问题可能与大小端相关。您可以检查一下您的系统是否是大端存储还是小端存储。如果您的系统是小端存储,那么您可以将读取到的数组逆序后再转化为long类型。这应该可以解决您遇到的问题。

另外,您也可以使用一些现有的库或函数来进行类型转换,这些库或函数会自动处理大小端问题,减少出错的可能性。比如,可以使用 Arduino 的 EEPROM 库函数来读取和写入 EEPROM 中的数据,再用 atoi() 函数或 atol() 函数进行数据类型的转换。

最后,一些硬件或软件问题也可能导致出现转化错误。如果上述方法均无法解决问题,您可以考虑检查硬件和软件相关问题。如果您有任何其他的问题或疑问,请随时联系我。

看看 eepron 中的数据写入正确了没有

这种使用EEPROM的方式本身就有问题,EEPROM寿命并不长,1秒1次很快就会坏掉的。
另外,EEPROM在低压下操作是很容易数据丢失的,你1秒写一次,然后突然断电,很容易发生在写入的时候断电的情况,即使加了低压保护,也可能发生写入不完整的情况。
建议你不要随时写入,而是做个掉电检测电路,检测到掉电的时候,停掉系统其他任何功能,只写入EEPROM