首页 > 解决方案 > 为什么 WiringPiISR 在触发时不阻塞主程序?

问题描述

我正在用 C 语言开发一个在覆盆子板上运行的程序。在程序中,我想使用 WiringPiISR 来处理引脚触发的中断。然而,我发现,wiringPiISR 并没有阻塞主程序,而是创建了一个并发线程。我错过了什么吗?

最小代码示例:

#include <WiringPi.h>
#include <unistd.h>
int Check=0;
void Isr()
{
    while (1)
    {
       sleep(1);
       Check++;
    }
}

int main()
{
     wiringPiSetup () ;
     pinMode(7, INPUT) ;
     wiringPiISR (7, INT_EDGE_BOTH ,&Isr);
     while (1)
      {
         sleep(2);
         printf("check : %d", Check );
      }
   return 0;
}

我希望这个最小的程序在中断触发后永远不会恢复,但在我的情况下,它会继续增加变量检查并将其打印在屏幕上(两个线程同时工作)。

标签: craspberry-piembeddedwiringpi

解决方案


假设您已经进行了无限循环和sleep()故意调用:

sleep()可能允许在线程之间切换。


推荐阅读