xieyuanbin 发表于 2008-9-4 08:40 PIC 单片机 ←返回版面
20楼: 问一下匠人电源如何得来?
貌似周期性失败? 不知道你校验失败后如何处理?重写还是跳过?没看到你重写的程序.只写一次遇到写失败的可能性比较大.我一般的处理是写-校验-错-重写-校验-错-报错.
----------------------------------------------- 第1个问题:电源是靠滑环和电刷传导的,虽然有电容稳压,不过,还是会有接触不良导致的波动。另外,由于LED显示切换,也可能导致波动。这些都是猜测,因为板子在旋转,无法用示波器去观察板子上的电压波动情况。
第2个问题:为了满足实时性,我在写E2PROM的等待周期里,不会空等待,而是把系统控制权交回给系统。待到下次再进入程序时再去做校验。如果写入失败,我会再写,连续三次校验失败,则跳过。我的处理是(先读-校验-错-写-再读-校验-再错-再写-连续错-跳过)。程序我前面已经给出了,现在再摘录并说明如下:
if ( EEP_SAVE_ID <= 180 ) //保存自定义点阵图片下部 { //读出校验 EEADR = PICTURE2_ADR + EEP_SAVE_ID - 90 ; //地址 read_eeprom() ; //EEPROM字节读程序 if ( EEDATA == DISP_QUEUE2[EEP_SAVE_ID - 90] ) //如果校验一致(代表写成功,切换到下一单元) { EEPROM_ERR_JSQ = 0 ; //EPPROM写失败计数器=0 EEP_SAVE_ID ++ ; //EEPROM存储指针+1 (切换到下一单元) } else if ( ++EEPROM_ERR_JSQ > 3 ) //如果连续n次写入失败(代表写失败,放弃当前单元,切换到下一单元)
{ EEPROM_ERR_JSQ = 0 ; //EPPROM写失败计数器=0 EEPROM_ERR_FLAG = 1 ; //EPPROM写失败标志=1 EEP_SAVE_ID ++ ; //EEPROM存储指针+1 (放弃当前单元,切换到下一单元) } else //否则,更新数据 { EEDATA = DISP_QUEUE2[EEP_SAVE_ID - 90] ; //数据 write_eeprom() ; //EEPROM字节写程序(这里是真正的写入操作,一般来说,第一次读校验后,会执行这里) } |