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