Ich löse sowas meistens mit einem JobStack. Du legst in der ISR einen Pointer, der auf die Funktion zeigt, die ausgeführt werden soll, auf den JobStack. Den JobStack arbeitest du dann in der Main-Loop ab. Damit ist die Funktion aus dem Interrupt-Kontext gelöst und du hast kein Problem mit unaufgeräumten Stacks und anderen Laufzeit-Problemen, da alles mit C-Board mitteln gelöst wird.