while(1)
{
GPIO_SetBits(GPIOG, GPIO_Pin_1);
//延时1ms的程序
for(count =0 ; count < 6; count++)
{
for(i = 0; i < 1000; i++);
}
//SET TO LOW
GPIO_ResetBits(GPIOG, GPIO_Pin_1);
//延时1ms的程序
for(count =0 ; count < 6; count++)
{
for(i = 0; i < 1000; i++);
}
}
while(1)
{
GPIO_SetBits(GPIOG, GPIO_Pin_1);
//延时1ms的程序
for(count =0 ; count < 1; count++)
{
for(i = 0; i < 6000; i++);
}
GPIO_ResetBits(GPIOG, GPIO_Pin_1);
//延时1ms的程序
for(count =0 ; count <1; count++)
{
for(i = 0; i < 6000; i++);
}
}
只是修改了一下参数,G1脚高电平持续的时间,变化很大,这是什么原因呢?
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
{
for(i = 0; i < 1000; i++);
}
和
for(count =0 ; count < 1; count++)
{
for(i = 0; i < 6000; i++);
}
它们判断的所执行的时间是不一样的,不是简单的6*1000*指令周期或则1*6000*指令周期,两种写法在翻译成汇编之后的代码是不一样多的。
对于这两个来说,内层for循环执行一次所需要的时间是一样的,但是,因为外层for循环的次数不同,那么从内层跳到外层判断的次数就不同,第一个为7次,第二个为2次,(应该是这样,表示不是这个专业的,C不怎么好)就是因为这个,在跳转的时候,跳转一次所用的时间并不是一个指令周期的时间,假设为X,那么真正的时间或许应该是6*(1000+X)+X,1*(6000+X )+X,这里只能说或许是这样,具体是啥样,我还是不清楚,或许你用不同的编译器编译出来它们还有差别,更有甚者我在学51的时候,同样的for循环嵌套使用,前后两次编译出来得到的结果不一样。建议哈,要求不高的定时函数,可以用for写,最好是不要嵌套,如果实在不够,可以多调用几次嘛,while也行啊。要求高的还是用定时器写,准确,还不容易跑飞。有些函数,别人写好的,里面的参数还是不要改得好,自己写,有助于自己学习。
一周热门 更多>