1. 默认配置在1000个地址存储1000个数据
配置如下
计算地址
查看地址内容,等到打印完成
计算符合,从0-999共计1000
2. 修改配置在65536地址存储65536个数据
配置还是这个
因为传进去的地址是uint16_t,因此最大值是65536,写65536个数据在65536个地址里面
写到5200左右会每7s写一个数据,读的话还是很快
按照公式计算,512*10是10页,即会写到0x14000+0x5000
然而实际上是写到0x14747就结束了,大概1863个,还不到1页
3. 问题分析
我们重启一下,看下写到哪里开始慢起来,还是5270这个地方
大概在写到3000时候暂停(直接连接atclinktool会暂停读写数据)
写到了0x17190
减去14000,共计12688个地址
一个数据占用2个字节,加一个地址位2字节。相当于写一个数据需要4个字节空间。
也就是说最多写了3172个数据。
3127个数据,写的是
确实和我们结束时候的数据一样,但是跟地址似乎对应不上
起始是因为为了区别地址和数据,在数据上加了0x99导致
我们再来一次测试,直接写4096个数据
0x99是153和数据对上了
写到了0x1098,又对上了
4. 分析,写慢的原因
因为初始化的页数过多,因此我们只初始化一页测试看看结果,初始化一页,写4097个数据
结果显示到第650左右写的数据开始变慢,大约200ms左右写一次
看到从13800开始写了数据,
2048个地址,正好是1页,并且地址是倒着写的
并且是从03e开始写,也就是从地址62开始写
测试一下正好写完一页的,512多2个数据的,发现在510写完后会变慢。
考虑到EEP在当页起始需要去掉2个数据位置,正好写完一页开始变慢。
因此,上面的分析来看,写慢的原因找到了。
5. 交换写,备份区
我们看到上面有个备份区,看下这个是什么
测试512个数据,即第二个数据应该会放在前一页
发现前一页也因为有2个字节占用,重新从14000开始写,最后一个地址蟹道乐14000当页,而14000这个地址是之前被000地址占用了
为了方便看结果,单独写了两个地址的数据。
这里把地址0也给个特定值,发现在写完之后被覆盖了
因此如果要写1024个字节地址的话,最好就多初始化一页,初始化为512*2,即使用2页
最高写到400
备份区写到402
初始化的区域写到401,地址0的6666被覆盖掉
测试一下最高能到多少不会被覆盖
我们测试2页,也就是512*2=1024个,再少一个1023应该就OK了
因为后面加了2个固定数据,因此1023-2=1021,循环写1021个,0地址没有被覆盖
实际上最后一个8888没写上
回头看上面的计算少算了一个校验位,应该是-2才对
因此改为1024-2-2=1020,参考前面的少了个8888的位置,1020肯定是对的。
看到和计算的一样,备份区没有开始写,并且数据完整。