弘毅 发表于 2012-7-9 22:41:14

一个因为没有禁用中断引起的异灵案例

有童鞋使用下面的代码,测试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,求解释。

Randy 发表于 2012-7-10 08:37:19

说实在的,我不知道之前我遇到过没有,但是在调试代码的时候有时候就是很诡异,明明按照代码来执行的话是可行的,但是结果却是出人意料的,现在有人提出来了,以后调试就需要多一个想象的方向。{:soso_e100:}

shenhaiyu 发表于 2012-10-9 21:55:10

我也遇到了类似的灵异事件,见沙发:http://www.geek-workshop.com/thread-2133-1-1.html

test01 发表于 2012-10-9 23:24:49

还有一种灵异是内存不够导致的

Ansifa 发表于 2012-10-9 23:48:22

{:soso_e114:}我在做软件PWM也遇到过程序跑完一次卡一卡,莫非也是中断

ttyp 发表于 2012-10-10 09:16:18

有示波器就是好啊,以后写程序要多注意了啊,会不会是其他外部干扰?或是硬件的bug,用最小版试试看

zhangdeyue1 发表于 2012-10-11 16:04:48

因为系统占用了定时中断~!:lol我一直都怀疑系统把定时中断给占用了!不知道这个解释怎么样

ttyp 发表于 2012-10-11 16:39:44

zhangdeyue1 发表于 2012-10-11 16:04 static/image/common/back.gif
因为系统占用了定时中断~!我一直都怀疑系统把定时中断给占用了!不知道这个解释怎么样

你是说hex文件里,调用中断子程序占用了这个时间?如果间隔是规律的,可能是这个方向哦

zhangdeyue1 发表于 2012-10-11 17:49:35

ttyp 发表于 2012-10-11 16:39 static/image/common/back.gif
你是说hex文件里,调用中断子程序占用了这个时间?如果间隔是规律的,可能是这个方向哦

最明显的一个例子就是他有millis();调用系统运行时间的这个指令,原理我不晓得是什么!我个人分析是定时中断来记录系统运行时间的!:)

ttyp 发表于 2012-10-11 20:38:24

zhangdeyue1 发表于 2012-10-11 17:49 static/image/common/back.gif
最明显的一个例子就是他有millis();调用系统运行时间的这个指令,原理我不晓得是什么!我个人分析是定时中 ...

哪里调用了millis()?

zhangdeyue1 发表于 2012-10-11 21:52:54

ttyp 发表于 2012-10-11 20:38 static/image/common/back.gif
哪里调用了millis()?

没有调用,只是我觉得编译器默认会暂用定时器而已

芷雅焉 发表于 2012-10-27 14:42:35

首先谢谢你演示了如何禁用中断~哈哈,我还是第一次用

312494845 发表于 2012-10-27 15:22:22

细心               

芷雅焉 发表于 2012-10-27 15:23:37

芷雅焉 发表于 2012-10-27 14:42 static/image/common/back.gif
首先谢谢你演示了如何禁用中断~哈哈,我还是第一次用

然后这个确实解决了我的问题~~再次感谢!
页: [1]
查看完整版本: 一个因为没有禁用中断引起的异灵案例