Не совсем понял суть проблемы. Как вариант
CODE
struct Action {
bool todo = false;
Action *next = 0;
};
Action *event1;
void registerAction(Action **event, Action *a) {
a->next = *event;
*event = a;
}
void setOn(Action *event) {
while(event) {
event->todo = true;
event = event->next;
}
}
// модуль 1
Action mod1_event1;
registerAction(event1, mod1_event1);
void loop() {
if (mod1_event.todo) {
mod1_event.todo = false;
// ...
}
}
// модуль 2
Action mod2_event1;
registerAction(event1, mod2_event1);
void loop() {
if (mod2_event.todo) {
mod2_event.todo = false;
// ...
}
}
// где-то еще
ISR(isr) {
setOn(event1);
}
Если ставить флаг в прерывании, то чтение и сброс надо переделать на атомарное