找回密码
 立即注册
查看: 459|回复: 8

麻烦大佬帮看看这个eeprom循环擦写的代码!!

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:395
  • 最近打卡:2025-06-15 15:05:22
已绑定手机

142

主题

1688

回帖

2559

积分

金牌会员

积分
2559
发表于 2024-11-12 17:39:23 | 显示全部楼层 |阅读模式
本帖最后由 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寿命的.结果加快了 第一个扇区的反复擦写.
还有,代码中间有两个擦除指令. 删掉下面那个后.就不能运行.  删掉上面那个没有区别.

大佬帮看看好吗?
  1.   numm = IapRead(0x0020+2);
  2.                 mode = IapRead(EEPROMId+numm*0x0200);
  3.         if(CAP )
  4.         {
  5.                 mode++;
  6.                 if(mode>=4)mode=0;
  7.                 numm++;
  8.                 if(numm>=8)
  9.                 numm = 0;
  10.                 EEPROMId += numm * 0x0200;
  11.                 if(EEPROMId >= 0x0ffd)
  12.                 EEPROMId = 0x220;
  13.                 IapErase(numm);
  14.                 //                                  IapErase(0x0020);
  15.                 IapProgram(EEPROMId,mode);
  16.                 IapProgram(0x0020+2,numm);
  17.         }
  18.                 P3M0 = 0x04; P3M1 = 0x00; //
  19.         switch (mode)
  20.         {
  21.                 case 0:CCAP1H = 3;
  22.                         break;
  23.                 case 1:CCAP1H = 10;
  24.                         break;
  25.                 case 2:CCAP1H = 25;
  26.                         break;
  27.                 case 3:CCAP1H = 55;
  28.                         break;
  29.                 default:CCAP1H = 111 ;
  30.                         break;
  31.         }
复制代码
复制代码
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:178
  • 最近打卡:2025-06-12 08:44:23
已绑定手机

15

主题

628

回帖

822

积分

高级会员

积分
822
发表于 2024-11-12 20:46:13 来自手机 | 显示全部楼层
前排围观
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:395
  • 最近打卡:2025-06-15 15:05:22
已绑定手机

142

主题

1688

回帖

2559

积分

金牌会员

积分
2559
发表于 2024-11-12 20:53:51 来自手机 | 显示全部楼层
wnagming 发表于 2024-11-12 20:38
第一行是从一个固定位置取出numm的值,但是第17行又进行了写入,而擦除又不是每次都能擦掉0X0020+2的数据, ...

所以是这代码感觉有点问题,,
是在反复擦除第一个扇区,
我看串口打印数据,好像每次都是连着写,cap不为真的时候,就返回读第一扇区
有点头大
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:395
  • 最近打卡:2025-06-15 15:05:22
已绑定手机

142

主题

1688

回帖

2559

积分

金牌会员

积分
2559
发表于 2024-11-12 20:55:10 来自手机 | 显示全部楼层
wnagming 发表于 2024-11-12 20:38
第一行是从一个固定位置取出numm的值,但是第17行又进行了写入,而擦除又不是每次都能擦掉0X0020+2的数据, ...

还有个问题,您上次给的那个按字节写入的,
我改了下,现在每次cap为真的时候写入可以正常流程写了,,
但是读的时候直接就读0xff了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:395
  • 最近打卡:2025-06-15 15:05:22
已绑定手机

142

主题

1688

回帖

2559

积分

金牌会员

积分
2559
发表于 2024-11-12 21:16:47 | 显示全部楼层
wnag*** 发表于 2024-11-12 21:02
你现在是每次再同一个位置写入新的数据,当然是不行的

我知道是两个东西
现在这个基本是完善的.
测试出来和我看到的代码不同. 无非是多擦除几次第一页扇区
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:395
  • 最近打卡:2025-06-15 15:05:22
已绑定手机

142

主题

1688

回帖

2559

积分

金牌会员

积分
2559
发表于 2024-11-12 21:18:37 | 显示全部楼层
wnag*** 发表于 2024-11-12 21:01
所以每次读取数据都可以直接写入,看似是读取数据加一再写入

上次的代码.类似于是预读.
应该也叫遍历是吗?
我把判断条件放在前面一点点.
好像也能按照逻辑来执行
就是总是觉得不完美.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:395
  • 最近打卡:2025-06-15 15:05:22
已绑定手机

142

主题

1688

回帖

2559

积分

金牌会员

积分
2559
发表于 2024-11-12 21:38:35 | 显示全部楼层
wnag*** 发表于 2024-11-12 21:02
你现在是每次再同一个位置写入新的数据,当然是不行的



这个是代码
下面那个是三个字节
分别为
eepromid..(0,1,2三个变量循环).. CAP状态(1和0)
CAP状态为1 的时候,就可以增加eepromid, 三个变量也能循环.
CAP状态为0的时候, eepromid不增加. 但是读出来的三个变量变成ff了.
逻辑上已经完全正确了.   
现在只要把FF变成关机前的那个变量.就完美了.
111.PNG

截图202411122136597042.jpg



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:395
  • 最近打卡:2025-06-15 15:05:22
已绑定手机

142

主题

1688

回帖

2559

积分

金牌会员

积分
2559
发表于 2024-11-12 22:09:22 | 显示全部楼层
wnag*** 发表于 2024-11-12 21:02
你现在是每次再同一个位置写入新的数据,当然是不行的

卧槽,,,,卧槽
卧槽

我弄好了.

我弄好了
现在可以了
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:395
  • 最近打卡:2025-06-15 15:05:22
已绑定手机

142

主题

1688

回帖

2559

积分

金牌会员

积分
2559
发表于 2024-11-12 22:10:24 | 显示全部楼层
wnag*** 发表于 2024-11-12 21:02
你现在是每次再同一个位置写入新的数据,当然是不行的

如果cap==0
eepromid -1
就行了....
现在代码完美了..
下一步做记录cap ++
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 12:58 , Processed in 0.124225 second(s), 96 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表