一个因为没有禁用中断引起的异灵案例
有童鞋使用下面的代码,测试Arduino端口的切换高低电平的最快速度。代码如下:int led = 6;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
digitalWrite(led, LOW);
}
正常的低电平都是5us左右,但是每隔一段时间,都会出现一段10us左右的低电平,很是怪异。
后来发现,是没有禁用中断引起的。只要使用下面的代码,禁用中断,就不会出现那异灵的10us低电平了。
int led = 6;
void setup() {
noInterrupts();
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
digitalWrite(led, LOW);
}
禁用中断后的波形。。就没有那异灵的10us了~
但是为什么不禁用中断,会每隔一定时间,出现一个异灵的10us,求解释。 说实在的,我不知道之前我遇到过没有,但是在调试代码的时候有时候就是很诡异,明明按照代码来执行的话是可行的,但是结果却是出人意料的,现在有人提出来了,以后调试就需要多一个想象的方向。{:soso_e100:} 我也遇到了类似的灵异事件,见沙发:http://www.geek-workshop.com/thread-2133-1-1.html 还有一种灵异是内存不够导致的 {:soso_e114:}我在做软件PWM也遇到过程序跑完一次卡一卡,莫非也是中断 有示波器就是好啊,以后写程序要多注意了啊,会不会是其他外部干扰?或是硬件的bug,用最小版试试看 因为系统占用了定时中断~!:lol我一直都怀疑系统把定时中断给占用了!不知道这个解释怎么样 zhangdeyue1 发表于 2012-10-11 16:04 static/image/common/back.gif
因为系统占用了定时中断~!我一直都怀疑系统把定时中断给占用了!不知道这个解释怎么样
你是说hex文件里,调用中断子程序占用了这个时间?如果间隔是规律的,可能是这个方向哦 ttyp 发表于 2012-10-11 16:39 static/image/common/back.gif
你是说hex文件里,调用中断子程序占用了这个时间?如果间隔是规律的,可能是这个方向哦
最明显的一个例子就是他有millis();调用系统运行时间的这个指令,原理我不晓得是什么!我个人分析是定时中断来记录系统运行时间的!:) zhangdeyue1 发表于 2012-10-11 17:49 static/image/common/back.gif
最明显的一个例子就是他有millis();调用系统运行时间的这个指令,原理我不晓得是什么!我个人分析是定时中 ...
哪里调用了millis()? ttyp 发表于 2012-10-11 20:38 static/image/common/back.gif
哪里调用了millis()?
没有调用,只是我觉得编译器默认会暂用定时器而已 首先谢谢你演示了如何禁用中断~哈哈,我还是第一次用 细心 芷雅焉 发表于 2012-10-27 14:42 static/image/common/back.gif
首先谢谢你演示了如何禁用中断~哈哈,我还是第一次用
然后这个确实解决了我的问题~~再次感谢!
页:
[1]