arduino进入中断delay函数失效?
今天琢磨arduino中断的时候,发现了一个很奇葩的现象,那就是:arduino进入中断后,delay函数的运行时间被缩短了!中断函数里面的delay(5000)运行时间居然比250毫秒还要短!这究竟是怎么回事?求大神解答,我都搞了一晚上了下面上代码
void setup() {
pinMode(13,1);
pinMode(7,1);
attachInterrupt(0,interrupt,FALLING);
}
//下面这个中断函数运行用了4秒不到的时间
void interrupt(void)
{
for(int i=0;i<10;i++)
{
digitalWrite(7,1);
delay(5000);//时间好像被压缩了?
digitalWrite(7,0);
delay(5000);//时间好像被压缩了?
}
}
boolean state=true;
void loop() {
digitalWrite(13,state);
state=!state;
delay(250);//一切正常
}
interrupt 內的程序應該是盡量簡單的.
而且, 官網早已清楚說明:
Inside the attached function, delay() won't work and the value returned by millis() will not increment.
本来中断就是短频快的东西,一般这种单CPU单线程执行的设计中,都不希望在中断中做太多事,做太多事,其它事情都会被阻塞在哪里。。 Super169 发表于 2014-10-29 00:17
interrupt 內的程序應該是盡量簡單的.
而且, 官網早已清楚說明:
原来如此! pencilstart 发表于 2014-10-29 14:53
本来中断就是短频快的东西,一般这种单CPU单线程执行的设计中,都不希望在中断中做太多事,做太多事,其它事 ...
你这么说我就懂了 Super169 发表于 2014-10-29 00:17
interrupt 內的程序應該是盡量簡單的.
而且, 官網早已清楚說明:
可是delay的数值足够大的话,还是能够产生可观的延时,官网不是说delay不会工作吗? a1039752256 发表于 2014-10-29 19:50 static/image/common/back.gif
可是delay的数值足够大的话,还是能够产生可观的延时,官网不是说delay不会工作吗?
delay() won't work - 可以解作做不到原來應該做的事.
例如 delay(10000) 原來是空等 10 秒, 現在變成只等 1 秒, 難道還可以說成 delay still work?
只要做不出原來應該有的效果, 就已經是有問題, 可以說是 won't work 了.
或者, 如果說成 delay() won't work as usual 你會比較接受吧.不要過於咬文嚼字, 重點是 delay 不能正常地用. Super169 发表于 2014-10-29 22:50
delay() won't work - 可以解作做不到原來應該做的事.
例如 delay(10000) 原來是空等 10 秒, 現在變成 ...
好吧,我懂了,谢谢你
页:
[1]