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

2019-07-25 15:07发布

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);                                                                                       
                                                                                       
                }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
aozima
2019-07-26 05:58
这种代码一般都凭经验试出来的。数据手册有给最大超时时间。然后实际根据运行时间调个合适的值。
但如果这个代码某天运行速度变快(比如原来在FLASH中慢速运行,后来到RAM中高速运行),原来的值可能就不够用了。

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

一周热门 更多>