So direkt geht da nicht.
Du musst dir die dazu benötigte Infrastuktur selbst herstellen.
Die Frage ist nur, ob du das möchtest, bzw. bereit bist den Preis dafür
zu zahlen :-)
Man könnte zb
* Jede funktionale Gruppe teilt einem Handler die Adresse seiner 'ISR'
Funktion mit. Der Handler trägt die in eine Tabelle ein. Aus CPU Sicht
gibt es nur eine ISR. Aber in dieser ISR wird die Tabelle abgearbeitet
und nacheinander alle registrierten Funktionen aufgerufen
* Der Handler unterhält keine Tabelle, sondern nur die Adresse der
ersten aufzurufenden Funktion. Registriert eine funktionale Gruppe
eine Behandlungsfunktion für einen bestimmte ISR, so merkt sich der
Handler diese Adresse und liefert gleichzeitig die bisherige Adresse
der aufzurufenden Funktion zurück. Die funktionale Gruppe wiederrum
merkt sich diese Adresse und ist verpflichtet am Ende ihrer eigenen
Behandlung genau die Funktion an dieser Adresse aufzurufen. Kommt der
Interrupt, so ruft die eigentliche ISR nur die erste Funktion auf.
Aber da jede Funktion ihren Nachfolger verpflichtend aufrufen muss
(seine Adresse kennt er ja, die wurd ihr beim registrieren geliefert)
werden auch hier im Endeffekt alle registrierten Funktionen aufgerufen
Im Endeffekt hat man damit ebenfalls im Grunde eine Tabelle aller
registrierten Behandlungsfunktionen, nur ist diese Tabelle über
das ganze Programm verstreut.
Bei solchen Dingen geht es dann schon in Richtung 'kleines
Betriebssystem'. Die Verwaltung bzw. die Bereitstellung solcher Konzepte
ist eine der noblen Aufgaben eines Betriebssystems bzw. das, was mit in
den Begriff API (Application Programmers Interface) fällt.