首页 > 代码库 > 51使用while进行延时的问题

51使用while进行延时的问题

上周写了一个简单的IO口翻转的程序,但是很奇怪,在FPGA板子上怎么也跑不起来。

后面发现问题可能出在延时函数上。

void Delay(unsigned char t)
{
    while(--t);
}

while(--t)在有些编译中无法正确编译--t,编译器认为这样是可以优化的(这个是我们老大给出的可能回答)。所以它们就对它进行了优化。其实具体原因我也不是很清楚。

后面换成下面这种形式或者for循环一切就正常了。

void Delay(unsigned int t){
    while(t!=0){
        t=t-1; 
    }
}

当然啦,具体是不是编译器的原因,我也不是很清楚,因为调试看汇编代码是没有问题的。keil这边没问题,那应该就是仿真那边的问题了。

51使用while进行延时的问题