EEPROM数据丢失
本帖最后由 pzsh 于 2022-4-20 10:32 编辑写PIC程序的时候遇到一个很奇怪的问题,我也是第一次使用PIC单片机,在这里分享出来,希望同样遇到问题的避免再次踩坑。项目中就是需要对传感器标定后的相关参数存储到PIC单片机内部的EEPROM中,因为程序处理调试阶段,每一次进入程序我都是使用的在线调试模式进入,在整体调试的过程中发现每一次进入程序直接读取EEPROM中的数据读取出来都是FF,也就是感觉EEPROM当中根本就没有数据,只有将数据写入进去一次然后再次读取才能够读取到正常的数据,而且无论读取多少次都是存在着数据的,但是当再次重新进入调试模式时读取出来的数据又是空的。开始我是考虑是否写入或者读取存在着问题,但是经过无数次的资料查询和相关案例的参考,发现代码的逻辑上根本就没有问题。网上也查询了无数的资料,都没有看到类似的解决方法。最后我试了一次直接将程序烧录进入PIC单片机,不进入调试模式,通过打印日志的方式,发现数据读取是正常的,为什么会这样我也一直没有查到相关资料。我感觉有可能是调试工具在进入调试模式的时候或者在烧录程序的时候将EEPROM中的额数据一并给擦除了。 PIC单片机应该是在烧写时会一起烧写EEPROM的。
可以用__EEPROM_DATA()命令将数据在烧写时直接烧写进EEPROM。
在MAPLB下面用KIT3之类的在线调试工具,在MPLAB下还没有执行代码运行时,芯片的复位脚被KIT3强制限制在复位状态下,此时MPLAB下查看所有的芯片寄存器等数据均被MPLAB软件强行恢复为芯片复位默认值。
当MPLAB点运行按钮后,芯片复位脚释放,此时MPLAB才会和芯片交互数据,此时才能真正读到芯片的各类真实数值。
所以这没有毛笔,而是MPLAB就是这么做的,也和芯片没有半毛钱的关系
另外,我接触到的所有其他家的芯片都类似如此。这是常识。
全部丢失那说明没有写进去。
没有丢,只是你重新启动调试的时候IDE又把芯片擦除了一遍,所以之前的内容就没有了
调试模式和烧写模式默认是烧写EEPROM的。每次从新下载程序时,不管是在调试模式还是烧写模式,都要初始化EEPROM。
嗯,除非你用__EEPROM_DATA()设置EEPROM初始化的值。
谢谢楼主分享,以后碰到这种情况的时候就有印象了
经验啊。
加分类
IDE默认是操作全范围的存储器的, 包含FLash和EEPROM的.
如果你只需要操作flash, 而不管EEPROM的话, 你可以在IDE里面设置一下, 保留EERPOM的..这是可以的.
难道没有不擦除eeprom的选项吗
究竟怎么了?为什么会发生这样的事情呢?一直搞不明白咋回事,哈哈
应该里面的有坏扇区吧,坏扇区的话,没有办法弄肋
究竟怎么了?为什么会发生这样的事情呢?一直搞不明白咋回事,哈哈
页:
[1]
2