改成这样, 编译不会错误 void delay_x2ms(unsigned int i) { unsigned char j, k; for(i; i>0;i--) for(j=4;j>0;j--) for(k=248;k>0;k--) //; 后面多了个分号 if(f==1) { t=0; break; } } |
你定义的i为参数。 参数应该赋给j或k, 这样才是正确for语句用法 |
所以来这里问咯 |
可以看一下循环,这个好像在switch也是在括号外面吧!其次在if能用break吗?留个问题借楼 |
先看下C语言for循环 |
if一般没有带break的,你的k循环不受if控制,if在这里不是for循环内嵌语句.一句话,逻辑没理清. |
说说原因 |
开环和闭环你应该没有搞清楚吧 |
f是全局变量吧? 在定时器中断还是外部中断里面被改变? if语句没有起到延迟的限制作用,for循环执行完后,无论if判断结果如何,都会退出这个延迟函数。 if判断只能判断f的值,而去改变t的值。 多看看c语言基础知识吧。 |
man1234567 发表于 2020-9-29 17:25 详细说下,谢谢啦 |
这个延时是个闭环,如果搞条件的话放在外面。 |
说错了,是当f为1是跳出这个延时 |