本帖最后由 vb2002 于 2024-11-12 18:51 编辑
大佬帮看看,这段代码
功能上没有问题. 但是现在如果CAP==1,会按页擦除eeprom
按道理应该是 0x0000,0x0200,0x0400,0x0600,0x0800,0x0a00,0x0c00,0x0e00, 这样的顺序.
但是如果中间中断了.比如擦到0x0400 了. 这个时候CAP==0了.
应该下次CAP==1的时候 继续接上0x0400 往下擦除.(但是实际上,到0x400了..又从0x0000开始了)
本来想着节约eeprom寿命的.结果加快了 第一个扇区的反复擦写.
还有,代码中间有两个擦除指令. 删掉下面那个后.就不能运行. 删掉上面那个没有区别.
大佬帮看看好吗?
- numm = IapRead(0x0020+2);
- mode = IapRead(EEPROMId+numm*0x0200);
-
- if(CAP )
- {
- mode++;
- if(mode>=4)mode=0;
- numm++;
- if(numm>=8)
- numm = 0;
- EEPROMId += numm * 0x0200;
- if(EEPROMId >= 0x0ffd)
- EEPROMId = 0x220;
- IapErase(numm);
- // IapErase(0x0020);
- IapProgram(EEPROMId,mode);
- IapProgram(0x0020+2,numm);
- }
- P3M0 = 0x04; P3M1 = 0x00; //
- switch (mode)
- {
- case 0:CCAP1H = 3;
- break;
- case 1:CCAP1H = 10;
- break;
- case 2:CCAP1H = 25;
- break;
- case 3:CCAP1H = 55;
- break;
- default:CCAP1H = 111 ;
- break;
- }
复制代码
复制代码
|