Konzept: Schnittstellen API an Interrupt Routine

Gast #2701720
Guten Morgen,

ich habe folgendes Problem:

Ich habe eine fertige Anwendung, an die eine Schnittstelle angebunden 
werden soll. Die fertige Anwendung (grauer Kasten) ist fix und kann in 
keinster Weise verändert werden.

Das Problem entsteht dadurch, dass die API-Funktionen aus Interrupt 
Routinen aufgerufen werden. Bevor meine Funktionen aufgerufen werden, 
werden alle anderen Interrupts deaktiviert und nach meiner Funktion 
wieder aktiviert. Teilweise ist die Laufzeit meiner Funktionen nicht 
unerheblich. Dadurch blockieren sich die API-Funktionen gleichzeitig.

Es gibt bereits eine solche API (d.h. es ist möglich), allerdings liegt 
diese nicht im Quellcode vor.

Ich hoffe, ihr habt einen Vorschlag, wie man das Problem lösen kann..

Grüße

Eike
Angehängte Dateien:
Gast
Du musst die Laufzeit deiner Callback Funktionen in den Griff kriegen 
und aufwändige Teile asxmchron laufen lassen. Im Callback also nur Daten 
wegspeichern und ein Flag setzen, dadas du im Hauptprogramm sporadisch 
prüfst.
Gast
@Tom: Das Problem ist ja, dass ich an das Hauptprogramm (main()) nicht 
heran komme. Sonst würde ich natürlich nur ein Flag setzen.

@Peter: Das ganze läuft auf einem TI TMS320F28335 DSP.

Ich weiß, dass das ganze etwas unlogisch klingt, aber was mich daran 
stört ist, dass ich eine API (wie gesagt nicht quelloffen) habe, mit der 
das ganze einwandfrei funktioniert.
Hallo,

mein Vorschlag: Generiere dir einen Timer-Interrupt, der deine eigene 
'main'-Funktion periodisch auf ruft. (Du kannst beim Eintritt in diese 
Funktion die anderen Interrupts wieder aktivieren, dadurch sollte die 
black-Box wie gewohnt arbeiten.)
In den Callback-Funktionen setzt du einfach nur Flags, die dann in 
deiner main-Funktion ausgewertet werden.
Um das ganze zu beschleunigen könntest du noch zusätzlich in der 
Callback-Funktion den Timerwert kurz vor den Überlauf stellen, so dass 
der Timerinterrupt sofort ausgeführt wird, sobald die Callbackfunktion 
abgearbeitet ist.
Oder, falls von dem Controller unterstützt, Software-Interrupts 
verwenden.

Das ganze ist zwar alles andere als schön, könnte aber funktionieren...


Grüße,
Florian
Gast
@Florian: Genau die Idee hatte ich auch schon, allerdings hat der 
Controller nur 3 Timer. Einer wird standardmäßig schon für die 
Schnittstelle benötigt. Wenn ich jetzt noch einen nehme, hab ich schon 
2/3 nur für die Schnittstellen verbraucht. Als Notlösung geht das 
natürlich.

Dazu kommt aber noch, dass das fertige API ja auch ohne den zweiten 
Timer auskommt. Ich würde es ja gerne genauso elegant lösen.

Habt ihr noch andere Ideen?

Grüße Eike
Gast
Also der API-Call gibt teilweise einen Rückgabewert zurück. Aber alle 
Calls werden pro ISR nur einmal aufgerufen.

Als Beispiel:

ISR_xy{

//alle anderen Interrupts disablen

res = fkt();

//alle anderen Interrupts enablen

}


int fkt(){

//do action

return res;

}

Und ich habe wie gesagt nur die Möglichkeit fkt() zu gestalten. Auf 
alles andere habe ich keinen Zugriff, kann es aber lesen. Und die 
Laufzeit von fkt() ist bei deaktivierten Interrupts definitiv zu lang.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.