Forum: Mikrocontroller und Digitale Elektronik printf aus einer Interruptroutine ausführen


von Tom (Gast)


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

von Thomas (Gast)


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

von Winne (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.