Attache the Arduino ISR function to the class member

I was intend to use timer interrupt for limited instances of a class in my ESP32 Arduino project, my first code conception was as follows

typedef void (*irqCallback)  (void);
                irqCallback timerCBArray[] ={  timerCB0 };

void ARDUINO_ISR_ATTR timerCB0(){
  portENTER_CRITICAL_ISR(&lock0);  
    //manipulate class private and public variables
  portEXIT_CRITICAL_ISR(&lock0);              
  }

hw_timer_t * timer[3] = NULL;

class myClass
{
private:
  irqCallback timmerCB;
  volatile uint8_t pri_var1,pri_var2;
  static uint8_t class_instance_number=0;
public:
  volatile uint8_t pub_var1,pub_var2;
  myClass(/* args */);
  ~myClass();
};

myClass::myClass(/* args */)
{
  timmerCB=timerCBArray[class_instance_number];
  timer[class_instance_number] = timerBegin(0, 80, true);  
  timerAttachInterrupt(timer[class_instance_number], &timmerCB, true);
class_instance_number++;
}

however, I came to this problem, how can I change the variable inside the interrupt regards to each class instance
any help really appreciated

Impossible without a reference to a class instance.

Doesn't "timerCB0()" already know that it is for instance 0? The class should maintain a static list of instance pointers so you can look up the instance by number.

you are right, I should connect the class instance to a static list

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.