打印
[MCU]

i和timeout的值是怎么出来的?

[复制链接]
467|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
spark周|  楼主 | 2020-9-11 20:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Uint16        ChipErase(void)
                {
                        Uint16        Data;
                        Uint32        TimeOut,i;                                
                        *(FlashStart + 0x5555) = 0xAAAA;
                        *(FlashStart + 0x2AAA) = 0x5555;
                        *(FlashStart + 0x5555) = 0x8080;
                        *(FlashStart + 0x5555) = 0xAAAA;
                        *(FlashStart + 0x2AAA) = 0x5555;
                        *(FlashStart + 0x5555) = 0x1010;        
                        i = 0;
                        TimeOut = 0;
                        while(i<5)
                                {
                                        Data = *(FlashStart +  0x3FFFF);
                                        if        (Data == 0xFFFF)        i++;
                                        else        i=0;
                                        if ( ++TimeOut>0x1000000)                   //0x1000000地址值1M容量
                                                return (TimeOutErr);
                                }
                        for        (i=0;i<0x40000;i++)        
                                {
                                        Data = *(FlashStart + i);
                                        if (Data !=0xFFFF)        return (EraseErr);
                                }
                        return  (EraseOK);                                                                                       
                                                                                       
                }

使用特权

评论回复

相关帖子

沙发
liliang9554| | 2020-9-11 20:36 | 只看该作者
i的大小0x40000这肯定就是你flash的大小相关0x40000*2=512KB,i=5就不清楚了

使用特权

评论回复
板凳
liliang9554| | 2020-9-11 20:39 | 只看该作者
0x1000000不是1M啊,是16M,这个就是擦除时限,和地址没关系吧

使用特权

评论回复
地板
午夜粪车| | 2020-9-11 20:43 | 只看该作者
擦除不成功的话,当计数达到退出,给定一个时限而已。

使用特权

评论回复
5
zhaoxqi| | 2020-9-11 20:48 | 只看该作者
不过我在想如果本来flash在0x3FFFF处就没有值,本身就是0xFFFF,而前面数据,那不是循环5次就退出,这5次的时间够不够擦出整个chip的呢

使用特权

评论回复
6
jiahy| | 2020-9-11 20:55 | 只看该作者

这种代码一般都凭经验试出来的。数据手册有给最大超时时间。然后实际根据运行时间调个合适的值。
但如果这个代码某天运行速度变快(比如原来在FLASH中慢速运行,后来到RAM中高速运行),原来的值可能就不够用了。

就像当年DOS的游戏到P4高性能机器上面跑得太快一样。
最好有时基来参考,这样不管什么配置的电脑,只要性能够用,效果都差不多。

使用特权

评论回复
7
huangchui| | 2020-9-11 20:59 | 只看该作者
Data = *(FlashStart +  0x3FFFF);这句为什么要加0x3FFFF,搞不明白

使用特权

评论回复
8
jiahy| | 2020-9-11 21:03 | 只看该作者
楼主那个程序的不算复杂的,好理解的

使用特权

评论回复
9
huangchui| | 2020-9-11 21:09 | 只看该作者

Data = *(FlashStart +  0x3FFFF);
                                        if        (Data == 0xFFFF)        i++;
                                        else        i=0;
                                        if ( ++TimeOut>0x1000000)                   //0x1000000地址值1M容量
                                                return (TimeOutErr);
条件判断自己累加的

使用特权

评论回复
10
huangchui| | 2020-9-11 21:21 | 只看该作者
这个采用If判断语句的,达到该条件了,就自动加1的,,这两个自累加的还是有点区别的,一个是先调用再加的,另一个相反。

使用特权

评论回复
11
zhanghqi| | 2020-9-11 21:25 | 只看该作者
这个看来是跟存储状态的相关系的

使用特权

评论回复
12
spark周|  楼主 | 2020-9-11 21:29 | 只看该作者
嗯,好的,我晓得啦

使用特权

评论回复
13
spark周|  楼主 | 2020-9-11 21:33 | 只看该作者

嗯,预料中的结果,多谢大家啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

821

主题

10121

帖子

4

粉丝