单片机C语言编程问题,高手进!拜谢!
写一个控制步进电机的控制程序,其中延时程序是这样的代码:voiddelay(void)//误差-0.000000000227us{unsignedchara,b,c;fo...
写一个控制步进电机的控制程序,其中延时程序是这样的代码:
void delay(void) //误差 -0.000000000227us
{
unsigned char a,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
_nop_; //if Keil,require use intrins.h
}
但是编译了以后出现了这样的警告,如图所示:
即:
STEPPING MOTOR C.C(15): warning C275: expression with possibly no effect
这个怎么就可能无效了呢?
求高手指点迷津!拜谢! 展开
void delay(void) //误差 -0.000000000227us
{
unsigned char a,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
_nop_; //if Keil,require use intrins.h
}
但是编译了以后出现了这样的警告,如图所示:
即:
STEPPING MOTOR C.C(15): warning C275: expression with possibly no effect
这个怎么就可能无效了呢?
求高手指点迷津!拜谢! 展开
3个回答
展开全部
首先你的编程习惯很不好,for嵌套,每一层都要用{}括起来,如果我没看错的话,你把每一层都加上{}就没问题了。
其次,一个延时函数怎么能写的这么低效呢?
其次,一个延时函数怎么能写的这么低效呢?
更多追问追答
追问
我是通过一个软件自动生成的延时函数,不是自己写的。
刚刚试了试for嵌套加上括号,我都加了的,还是出现同样的警告。
另外,它低效的原因估计是为了控制误差,就像那个注释里写的一样,误差很小(到底怎么样我也不知道,这个延时函数我整个就是复制粘贴过来的)。
大神还有其他改法吗?
追答
for(a=142;a>0;a--); /*这里的分号去掉了吗?*/
_nop_; //if Keil,require use intrins.h
展开全部
你把_nop_只写在一个for 下面 只执行 了 一个for循环 延迟
更多追问追答
追问
具体要怎么改呢?求指教!
追答
for(c=13;c>0;c--){
for(b=247;b>0;b--){
for(a=142;a>0;a--){
_nop_;
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
unsigned char a,b,c;为什么不定义int型,而是char型呢?
追问
这个。。我也不太清楚,我是用的一款软件自动生成延时函数的。
具体的刚刚用Keil调试了一下,发现本来是延时1s的,改成int了以后,延时变成了3s多。我估计是int和char在转换成的汇编语言时会变得不一样吧,总之改了就乱了。用char刚刚好。
话说,这char和出现的警告有关系吗?
追答
没关系,能看到的程序,只有 for(a=142;a>0;a--);中多个分号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询