[PIC®/AVR®/dsPIC®产品] EEPROM数据丢失

[复制链接]
2015|31
 楼主| stly 发表于 2022-4-11 22:09 | 显示全部楼层 |阅读模式
本帖最后由 pzsh 于 2022-4-20 10:32 编辑

写PIC程序的时候遇到一个很奇怪的问题,我也是第一次使用PIC单片机,在这里分享出来,希望同样遇到问题的避免再次踩坑。项目中就是需要对传感器标定后的相关参数存储到PIC单片机内部的EEPROM中,因为程序处理调试阶段,每一次进入程序我都是使用的在线调试模式进入,在整体调试的过程中发现每一次进入程序直接读取EEPROM中的数据读取出来都是FF,也就是感觉EEPROM当中根本就没有数据,只有将数据写入进去一次然后再次读取才能够读取到正常的数据,而且无论读取多少次都是存在着数据的,但是当再次重新进入调试模式时读取出来的数据又是空的。开始我是考虑是否写入或者读取存在着问题,但是经过无数次的资料查询和相关案例的参考,发现代码的逻辑上根本就没有问题。网上也查询了无数的资料,都没有看到类似的解决方法。最后我试了一次直接将程序烧录进入PIC单片机,不进入调试模式,通过打印日志的方式,发现数据读取是正常的,为什么会这样我也一直没有查到相关资料。我感觉有可能是调试工具在进入调试模式的时候或者在烧录程序的时候将EEPROM中的额数据一并给擦除了。
llljh 发表于 2022-4-11 22:11 | 显示全部楼层
PIC单片机应该是在烧写时会一起烧写EEPROM的。
supernan 发表于 2022-4-11 22:14 | 显示全部楼层
可以用__EEPROM_DATA()命令将数据在烧写时直接烧写进EEPROM。
zwll 发表于 2022-4-11 22:17 | 显示全部楼层
在MAPLB下面用KIT3之类的在线调试工具,在MPLAB下还没有执行代码运行时,芯片的复位脚被KIT3强制限制在复位状态下,此时MPLAB下查看所有的芯片寄存器等数据均被MPLAB软件强行恢复为芯片复位默认值。
dengdc 发表于 2022-4-11 22:24 | 显示全部楼层
当MPLAB点运行按钮后,芯片复位脚释放,此时MPLAB才会和芯片交互数据,此时才能真正读到芯片的各类真实数值。
wyjie 发表于 2022-4-11 22:26 | 显示全部楼层
所以这没有毛笔,而是MPLAB就是这么做的,也和芯片没有半毛钱的关系
llljh 发表于 2022-4-11 22:28 | 显示全部楼层

另外,我接触到的所有其他家的芯片都类似如此。这是常识。
juventus9554 发表于 2022-4-11 22:32 | 显示全部楼层
全部丢失那说明没有写进去。
kangzj 发表于 2022-4-11 22:34 | 显示全部楼层
没有丢,只是你重新启动调试的时候IDE又把芯片擦除了一遍,所以之前的内容就没有了
huangchui 发表于 2022-4-11 22:37 | 显示全部楼层
调试模式和烧写模式默认是烧写EEPROM的。每次从新下载程序时,不管是在调试模式还是烧写模式,都要初始化EEPROM。
jlyuan 发表于 2022-4-11 22:39 | 显示全部楼层
嗯,除非你用__EEPROM_DATA()设置EEPROM初始化的值。
zwll 发表于 2022-4-11 22:42 | 显示全部楼层

谢谢楼主分享,以后碰到这种情况的时候就有印象了
happy_10 发表于 2022-4-11 22:45 | 显示全部楼层

经验啊。
jiajs 发表于 2022-4-11 22:48 | 显示全部楼层
加分类 
juventus9554 发表于 2022-4-11 22:50 | 显示全部楼层
IDE默认是操作全范围的存储器的, 包含FLash和EEPROM的.
heweibig 发表于 2022-4-11 22:52 | 显示全部楼层
如果你只需要操作flash, 而不管EEPROM的话, 你可以在IDE里面设置一下, 保留EERPOM的..这是可以的.
wyjie 发表于 2022-4-11 22:55 | 显示全部楼层
难道没有不擦除eeprom的选项吗
zwll 发表于 2022-4-11 22:57 | 显示全部楼层

究竟怎么了?为什么会发生这样的事情呢?一直搞不明白咋回事,哈哈
pengf 发表于 2022-4-11 23:00 | 显示全部楼层
应该里面的有坏扇区吧,坏扇区的话,没有办法弄肋
supernan 发表于 2022-4-11 23:02 | 显示全部楼层
究竟怎么了?为什么会发生这样的事情呢?一直搞不明白咋回事,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

433

主题

7058

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部