Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未使用ESP32 Arduino调用中断函数_Arduino_Hardware - Fatal编程技术网

未使用ESP32 Arduino调用中断函数

未使用ESP32 Arduino调用中断函数,arduino,hardware,Arduino,Hardware,我将ESP32开发板与Arduino一起使用,并希望使用中断来确定主设备是否已向ESP32发送从属选择标志 这是我到目前为止试过的 一, 二, 我使用了两个版本,没有数字插拔 我需要做什么才能让中断正常工作?目前,当引脚34设置为高电平时,不会调用enableSend函数 如果有帮助的话,是我为ESP开发bord提供的引脚。为了将ISR中断服务例程放置在ESP32的内部RAM IRAM中,您肯定需要IRAM属性请参见2 我认为Serial.printlnSS已启用;您希望在ISR中执行的 对于I

我将ESP32开发板与Arduino一起使用,并希望使用中断来确定主设备是否已向ESP32发送从属选择标志

这是我到目前为止试过的

一,

二,

我使用了两个版本,没有数字插拔

我需要做什么才能让中断正常工作?目前,当引脚34设置为高电平时,不会调用enableSend函数


如果有帮助的话,是我为ESP开发bord提供的引脚。

为了将ISR中断服务例程放置在ESP32的内部RAM IRAM中,您肯定需要IRAM属性请参见2

我认为Serial.printlnSS已启用;您希望在ISR中执行的 对于ISR来说太复杂了

ESP32停止常规执行流以执行ISR,这应该是 可以在最短的时间内执行,只需几个CPU指令

通过串行端口发送数据需要相当多的毫秒,这对于ISR来说太长了

您可以使用ISR更改您在常规 执行流程,这样可以最大限度地降低设备流程混乱的风险
处决您可以从那里发送启用的SS。

您肯定需要IRAM_ATTR see 2,以便将ISR中断服务例程放置在ESP32的内部RAM IRAM中

我认为Serial.printlnSS已启用;您希望在ISR中执行的 对于ISR来说太复杂了

ESP32停止常规执行流以执行ISR,这应该是 可以在最短的时间内执行,只需几个CPU指令

通过串行端口发送数据需要相当多的毫秒,这对于ISR来说太长了

您可以使用ISR更改您在常规 执行流程,这样可以最大限度地降低设备流程混乱的风险
处决您可以从那里发送启用的SS。

什么是handleInterrupt?@Juraj抱歉!这就是“使能发送”。我忘了在发布之前我修改了它。更新!在此处复制准确的错误消息。中断处理程序中的所有内容都必须在IRAM中。我怀疑Serial.println在IRAM中。@Juraj没有错误。它就是跑不动。我还发出了一个HTTP get请求,该请求在循环中工作,但在中断中不起作用,因此不确定这是否是问题所在。@Juraj还更新了标题,因为在我点击submit之前修复了一个问题,这是误导性的。什么是handleInterrupt?@Juraj抱歉!这就是“使能发送”。我忘了在发布之前我修改了它。更新!在此处复制准确的错误消息。中断处理程序中的所有内容都必须在IRAM中。我怀疑Serial.println在IRAM中。@Juraj没有错误。它就是跑不动。我还发出了一个HTTP get请求,该请求在循环中工作,但在中断中不工作,因此不确定这是否是问题所在。@Juraj还更新了标题,因为在我点击submit之前修复了一个问题,这有误导性。我想就是它。我还做了一个HTTP请求,它不断地使设备崩溃。通过使用中断来设置在主循环中读取的标志,解决了这个问题。谢谢我想就是这样。我还做了一个HTTP请求,它不断地使设备崩溃。通过使用中断来设置在主循环中读取的标志,解决了这个问题。谢谢
#define SS 34

void enableSend() {
    Serial.println("SS Enabled");
}

void setup(){
  pinMode(SS, INPUT);
  attachInterrupt(digitalPinToInterrupt(SS), enableSend, RISING);
}
#define SS 34

void IRAM_ATTR enableSend() {
    Serial.println("SS Enabled");
}

void setup(){
  pinMode(SS, INPUT);
  attachInterrupt(digitalPinToInterrupt(SS), enableSend, RISING);
}