本项止转自github官方arduino-esp32 传在这里仅为阅读源码方便
projectuser
2019-07-05 50148ccffe21ff54262064ec9f2245900eaf18aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
 * FunctionalInterrupt.cpp
 *
 *  Created on: 8 jul. 2018
 *      Author: Herman
 */
 
#include "FunctionalInterrupt.h"
#include "Arduino.h"
 
typedef void (*voidFuncPtr)(void);
typedef void (*voidFuncPtrArg)(void*);
 
extern "C"
{
    extern void __attachInterruptFunctionalArg(uint8_t pin, voidFuncPtrArg userFunc, void * arg, int intr_type, bool functional);
}
 
void IRAM_ATTR interruptFunctional(void* arg)
{
    InterruptArgStructure* localArg = (InterruptArgStructure*)arg;
    if (localArg->interruptFunction)
    {
      localArg->interruptFunction();
    }
}
 
void attachInterrupt(uint8_t pin, std::function<void(void)> intRoutine, int mode)
{
    // use the local interrupt routine which takes the ArgStructure as argument
    __attachInterruptFunctionalArg (pin, (voidFuncPtrArg)interruptFunctional, new InterruptArgStructure{intRoutine}, mode, true);
}
 
extern "C"
{
   void cleanupFunctional(void* arg)
   {
     delete (InterruptArgStructure*)arg;
   }
}