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