极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 弘毅

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

[复制链接]
发表于 2012-7-9 22:41:14 | 显示全部楼层 |阅读模式
有童鞋使用下面的代码,测试Arduino端口的切换高低电平的最快速度。

代码如下:
  1. int led = 6;

  2. void setup() {               

  3.   pinMode(led, OUTPUT);     
  4. }

  5. void loop() {
  6.   digitalWrite(led, HIGH);              
  7.   digitalWrite(led, LOW);        
  8. }
复制代码


正常的低电平都是5us左右,但是每隔一段时间,都会出现一段10us左右的低电平,很是怪异。



后来发现,是没有禁用中断引起的。只要使用下面的代码,禁用中断,就不会出现那异灵的10us低电平了。

  1. int led = 6;

  2. void setup() {               
  3.   noInterrupts();
  4.   pinMode(led, OUTPUT);     
  5. }

  6. void loop() {
  7.   digitalWrite(led, HIGH);              
  8.   digitalWrite(led, LOW);        
  9. }
复制代码
禁用中断后的波形。。就没有那异灵的10us了~



但是为什么不禁用中断,会每隔一定时间,出现一个异灵的10us,求解释。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-7-10 08:37:19 | 显示全部楼层
说实在的,我不知道之前我遇到过没有,但是在调试代码的时候有时候就是很诡异,明明按照代码来执行的话是可行的,但是结果却是出人意料的,现在有人提出来了,以后调试就需要多一个想象的方向。{:soso_e100:}
回复 支持 反对

使用道具 举报

发表于 2012-10-9 21:55:10 | 显示全部楼层
我也遇到了类似的灵异事件,见沙发:http://www.geek-workshop.com/thread-2133-1-1.html
回复 支持 反对

使用道具 举报

发表于 2012-10-9 23:24:49 | 显示全部楼层
还有一种灵异是内存不够导致的
回复 支持 反对

使用道具 举报

发表于 2012-10-9 23:48:22 | 显示全部楼层
{:soso_e114:}我在做软件PWM也遇到过程序跑完一次卡一卡,莫非也是中断
回复 支持 反对

使用道具 举报

发表于 2012-10-10 09:16:18 | 显示全部楼层
有示波器就是好啊,以后写程序要多注意了啊,会不会是其他外部干扰?或是硬件的bug,用最小版试试看
回复 支持 反对

使用道具 举报

发表于 2012-10-11 16:04:48 | 显示全部楼层
因为系统占用了定时中断~!我一直都怀疑系统把定时中断给占用了!不知道这个解释怎么样
回复 支持 反对

使用道具 举报

发表于 2012-10-11 16:39:44 | 显示全部楼层
zhangdeyue1 发表于 2012-10-11 16:04
因为系统占用了定时中断~!我一直都怀疑系统把定时中断给占用了!不知道这个解释怎么样

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

使用道具 举报

发表于 2012-10-11 17:49:35 | 显示全部楼层
ttyp 发表于 2012-10-11 16:39
你是说hex文件里,调用中断子程序占用了这个时间?如果间隔是规律的,可能是这个方向哦

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

使用道具 举报

发表于 2012-10-11 20:38:24 | 显示全部楼层
zhangdeyue1 发表于 2012-10-11 17:49
最明显的一个例子就是他有millis();调用系统运行时间的这个指令,原理我不晓得是什么!我个人分析是定时中 ...

哪里调用了millis()?
回复 支持 反对

使用道具 举报

发表于 2012-10-11 21:52:54 | 显示全部楼层
ttyp 发表于 2012-10-11 20:38
哪里调用了millis()?

没有调用,只是我觉得编译器默认会暂用定时器而已
回复 支持 反对

使用道具 举报

发表于 2012-10-27 14:42:35 | 显示全部楼层
首先谢谢你演示了如何禁用中断~哈哈,我还是第一次用
回复 支持 反对

使用道具 举报

发表于 2012-10-27 15:22:22 | 显示全部楼层
细心                 
回复 支持 反对

使用道具 举报

发表于 2012-10-27 15:23:37 | 显示全部楼层
芷雅焉 发表于 2012-10-27 14:42
首先谢谢你演示了如何禁用中断~哈哈,我还是第一次用

然后这个确实解决了我的问题~~再次感谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 14:03 , Processed in 0.050380 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表