|
程序如下,目的,把Flash当eep用
puts("Before:");
ReadSettings();
printSettings(&Settings);
puts("Buffer:");
stmp.StableTime=i+1;
stmp.Tolerance=i+2;
stmp.Threshold1=i+3;
stmp.Hysteresis1=i+4;
stmp.Threshold2=i+5;
stmp.Hysteresis2=i+6;
printSettings(&stmp);
puts("Erase: ");
EraseRow(USER_SPACE);
ReadSettings();
printSettings(&Settings);
puts("After: ");
WriteRow(&stmp,USER_SPACE);
ReadSettings();
printSettings(&Settings);
i++;
XC8 1.32 破解pro版,取消speed优化(相当于空间优化)
结果如下:
Before:08 10 c8 00 0a e8 03 64 . 8 16 200 10 1000 100
Buffer:01 02 03 00 04 05 00 06 . 1 2 3 4 5 6
Erase: 08 10 c8 00 0a e8 03 64 . 8 16 200 10 1000 100
After: 08 10 c8 00 0a e8 03 64 . 8 16 200 10 1000 100
Before:08 10 c8 00 0a e8 03 64 . 8 16 200 10 1000 100
Buffer:02 03 04 00 05 06 00 07 . 2 3 4 5 6 7
Erase: 08 10 c8 00 0a e8 03 64 . 8 16 200 10 1000 100
After: 08 10 c8 00 0a e8 03 64 . 8 16 200 10 1000 100
Before:08 10 c8 00 0a e8 03 64 . 8 16 200 10 1000 100
Buffer:03 04 05 00 06 07 00 08 . 3 4 5 6 7 8
Erase: 08 10 c8 00 0a e8 03 64 . 8 16 200 10 1000 100
After: 08 10 c8 00 0a e8 03 64 . 8 16 200 10 1000 100
写不进去,擦除无效
改为speed优化
Before:08 10 c8 00 0a e8 03 64 . 8 16 200 10 1000 100
Buffer:01 02 03 00 04 05 00 06 . 1 2 3 4 5 6
Erase: ff ff ff ff ff ff ff ff . 255 255 65535 255 65535 255
After: 01 02 03 00 04 05 00 06 . 1 2 3 4 5 6
Before:01 02 03 00 04 05 00 06 . 1 2 3 4 5 6
Buffer:02 03 04 00 05 06 00 07 . 2 3 4 5 6 7
Erase: ff ff ff ff ff ff ff ff . 255 255 65535 255 65535 255
After: 02 03 04 00 05 06 00 07 . 2 3 4 5 6 7
Before:02 03 04 00 05 06 00 07 . 2 3 4 5 6 7
Buffer:03 04 05 00 06 07 00 08 . 3 4 5 6 7 8
Erase: ff ff ff ff ff ff ff ff . 255 255 65535 255 65535 255
After: 03 04 05 00 06 07 00 08 . 3 4 5 6 7 8
可以写入
测试发现,在space优化下,只要在EraseRow(USER_SPACE);
后面调用WriteRow(&stmp,USER_SPACE);,擦除就不行
即使我把WriteRow改到另外一个子程序中,或改变运行流程(比如擦除后作标记,过100ms后回来再写新数据),都是擦除不行
无意间想起来,底层的写入部分,在free版调试是OK,就还原回去,发现正常了。因为free默认是speed优化,所以OK。于是改回pro,用speed优化,也OK。
然后另一个麻烦来了,空间已经95%了,程序稍微加些功能就装不下。想从串口出个调试信息都麻烦,真TM蛋疼。
|
|