首页 > 解决方案 > ESP32:使用 IRAM_ATTR 时编译错误

问题描述

我确信我在做一些非常愚蠢的事情,但是在这里.. 当我将 IRAM_ATTR 用于我的 ISR 时,我得到一个编译错误。我正在为 ESP32 编译。

这是ISR的定义

void 
IRAM_ATTR
detectsBlockOccupancy() {
    ....
    ISR code..
    ...
}

这是第一个用法:

void setup() {

// Set Sensor pin as interrupt, assign interrupt function and set RISING mode
    attachInterrupt(digitalPinToInterrupt(BDInterruptPin), detectsBlockOccupancy, RISING);
...
}

我得到的错误如下:

在函数 'void setup()' 中:Node0:226:90: 错误:从 'int ( )()' 到 'void ( )()' 的无效转换 [-fpermissive] attachInterrupt(digitalPinToInterrupt(BDInterruptPin),检测块占用,上升) ; ^ 在来自 C:\Users\vibhas\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal.h:53:0 的文件中,来自 C:\Users\ vibhas\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\cores\esp32/Arduino.h:35,来自sketch\Node0.ino.cpp:1: C:\Users\vibhas\AppData\ Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\cores\esp32/esp32-hal-gpio.h:81:6: 注意:初始化参数 2'void attachInterrupt(uint8_t, void ( )(), int)' void attachInterrupt(uint8_t pin, void ( )(void), int mode); ^


如果我删除 IRAM_ATTR 那么它编译得很好。似乎认为我正在尝试传递不同类型的函数指针。我可能做错了什么?

谢谢 vibhas

标签: c++embedded

解决方案


推荐阅读