外部中断的一个现象?

2019-07-20 20:44发布

当外部中断服务函数里只写一句翻转io的代码的时候,实验现象是有时能翻转有时不能翻转,但当我加一句延时1us后,就每次都能翻转了,为什么会这样?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
27条回答
dfbb123
2019-07-24 00:05
本帖最后由 dfbb123 于 2016-8-12 18:32 编辑
特朗姆斯 发表于 2016-8-12 10:06
很敬佩你的钻研精神,但是你表达出来的意思有点难以理解

“加的代码可以是任意无用的”这句话是什么意 ...

谢谢你的夸奖,原来这叫专研精神,我还以为是走火入魔呢
我贴个代码给我看吧,
void EXTI2_IRQHandler(void)
{
        PCout(13)=!PCout(13);
        num++;
         EXTI-> PR=1<<2;  // &#199;&#229;3yLINE2é&#207;μ&#196;&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;  
        LED0=1;
        
}
看到那个LED0=1;了吗,这个就是任意无用的代码,你也可以写别的随便什么代码,关键是要放在清标志后面,有了这个代码程序就正常,拿掉就会进2次中断。
同理 EXTI->IMR&=~(1<<11); // 屏蔽line11上的中断
        EXTI-> PR=1<<11;  // 清除LINE11上的中断标志位
这样写也是会进2次中断才关闭中断的。要掉过来写的。
你讲的把翻转放到清标志后面就是起到标志后面有代码的作用,当然区别是这是有用的代码,所以当然也有效了。我观察到现象,也能排除现象,就是不懂为什么会这样?
      

一周热门 更多>