arduino - ESP32 服务中断例程的速度有多快?

标签 arduino esp32

美好的一天,我正在 Arduino IDE 上使用 ESP32。我已经编写了基本的外部中断例程来在变化沿触发。然后,我在中断内“立即”切换输出。

我目前正在测量输入和输出,我很惊讶地发现我的切换输出在上升沿延迟了 38us,在下降沿延迟了 18us。有什么办法可以减少这些时间延迟吗?我已附上我的范围图像。 Rising Edges Falling Edges Signals D2 是我的输入,D1 是我的输出。

有人可以向我解释一下 ESP32 离开主循环并服务中断所需的时间吗?

简而言之,我希望在尽可能短的时间内处理中断,就目前情况而言,延迟似乎是由于离开主循环并到达中断例程所花费的时间造成的。

我的代码如下:


volatile boolean toggle = false;
volatile int counter = 0;
portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED;

void IRAM_ATTR Pin34RPM(){
  //xyz
  if(toggle){
  GPIO.out_w1ts = ((uint32_t)1 << 19);
  }
  else{
  GPIO.out_w1tc = ((uint32_t)1 << 19); 
  }
   toggle = !toggle;

}
  
void setup(){

  
  pinMode(19, OUTPUT);
  digitalWrite(19,LOW);
  pinMode(34, INPUT_PULLUP);//Crank
  attachInterrupt(34, Pin34RPM, CHANGE);
  
  
}

void loop() {

   
}

最佳答案

Apparently预期中断延迟约为 2 us;或者您可以编写自己的 high level interrupt handlers在汇编程序中。如果您发现延迟明显较高,请考虑跳过 Arduino - 我不确定那里的 GPIO 库是否以性能为导向。我首先回到 Espressif 自己的 ESP IDF GPIO library .

关于arduino - ESP32 服务中断例程的速度有多快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66341123/

相关文章:

c - 将数据从 Arduino 内部串行缓冲区移动到内存中

c++ - 变量或字段 '...' 在 Arduino 编译器上声明为 void 错误

android-webview - ESP32 httpd : Header fields are too long for the server to interpret

ssl - ESP32 SSL 连接在 CA 证书为常量时有效,但在从文件中读取时无效

c - 复杂的 Arduino 项目有哪些工具(例如 IDE、调试器)?

arduino - ESP32 外部引脚唤醒,带内部上拉电阻

c - arduino 按钮不起作用

android - "Lost bytes"通过蓝牙将图像从 ESP32 发送到 Android Studio

c - 将小块数据写入闪存页面