简介
测试是在一个集成在ESP32开发板中的DFRobot的ESP-WROOM-32设备上进行的。
设置代码
首先我们将对该中断附加在全局变量上的引脚进行声明。请注意,根据您的ESP32开发板,ESP32微控制器的引脚编号和开发板标注的引脚编号可能不匹配。在FireeBeetle esp32开发板中,以下使用的引脚(数字引脚25)与标记为IO25/D2的引脚相互匹配。
const byte interruptPin = 25;
此外我们还将对计数器进行声明,中断例程将使用该计数器与主循环函数进行通信,并发出中断已发生的信号。请注意,此变量需要声明为volatile(易失性),因为它将由ISR和主代码共享。否则,该变量可能会因编译器优化而将其删除。
volatile int interruptCounter = 0;
此外,我们将声明一个计数器,对自程序启动后全局究竟出现多少次中断进行追踪。因此,每次发生中断时,此计数器都会递增。
int numberOfInterrupts = 0;
最后,我们将声明一个portMUX_TYPE类型的变量,利用其对主代码和中断之间的同步进行处理。我们稍后会看到如何使用该变量。
portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;
转到设置功能,我们首先打开一个串行连接,以便能够输出我们程序的结果。
Serial.begin(115200);
Serial.println("Monitoring interrupts: ");
接下来,由于我们将使用外部引脚中断,我们需要将先前声明