printf aus einer Interruptroutine ausführen

Gast #304341
Lesenswert?

@all,

ich schreibe gerade an einem Programm und habe nun das Problem,dass ich
mir gerne einen Wert mittels printf() auf dem Bildschirm ausgeben
möchte.
Ich möchte dies nur zu Testzwecken einsetzten.
Wenn ich nun printf() einfüge kommt
Multible Call to Segment
Segment ?PR?PRINTf...
Caller hier nun der Name der Interruptroutine.

Nun meine Frage.
Ist es nicht moglich einen printf in einer ISR auszuführen oder ist da
noch etwas zu beachten?

Verwende Keil uvision2 und einen 80C517A.

Danke

TOM
Gast #304342
Lesenswert?

Der Fehler kommt daher, dass du PrintF sowohl im Interrupt Kontext
als auch von Main aus aufrufst. Das geht normalerweise nicht.
Die Warning bekommst du auch nicht weg.

Generell solltest du dir sowiso was überlegen. Printf im Interrupt
geht normalerweise in die Hose weil zu lang...

Abhilfe:
Flags in der Interuptroutine setzten und in main() ausgeben.
oder
bei jedem printf() deinen Interupt sperren und hinterher
wieder einschalten.
Im zweiten Fall bleibt zwar die Warning, es ist aber zumindest
kontextsicher.

Thomas
Gast #304343
Lesenswert?

das ist auch gut so !

richtig definierst du eine Globale variable char meldung []="ok"
Deine ISR setzt meldung = errorsting
alternativ kannst du auch ne int variable nutzen

wenn diese nicht "" (leer) ist sollte main pintf aufrufen und den
zeiger auf *meldung übergeben. so wird der irq nicht unnötig lang und
du hast deine meldung.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren