Forum: Mikrocontroller und Digitale Elektronik Interups und Funktionsaufrufe


von Gast (Gast)


Lesenswert?

Hallo,

ich habe eine Frage zu Interupts. Ich sende an einen MSP per UART einen 
Befehl. Die UART-RX-ISR springt an. Dort rufe ich eine Funktion zum 
Abrufen einiger Registerwerte eines anderen ICs auf. Dazu übergebe ich 
dieser Funktion ein Byte-Array. Die Funktion schreibt die Registerwerte 
in das Array. Die einzelnen Array-Werte werden dann von einer weiteren 
Funktion einzeln per UART an den Rechner zurückgeschickt. Bei der 
Übergabe des Array bzw. einer Array-Elemente an Funktionen wird der 
Stack gefüllt richtig? Ist dieser dann wieder so leer wie vor dem 
ISR-Aufruf, sobald alle Vorgänge abgeschlossen sind?

Grüße

von Ralli (Gast)


Lesenswert?

Hm, was GAST da alles aufzählt, klingt nach tiefstem Fachwissen.
Irgendwie passt das Niveau der Frage nicht dazu.

Grundsätzlich sollte (bei Programmierung in C) der Stackzeiger
nach dem RETURN einer Funktion wieder auf dem alten Stand sein.

Das MAIN-Programm muss aber VIEL Zeit haben, wenn die UART-RX-ISR erst
nach dem seriellen Senden eines Arrays abgearbeitet ist.

Geschieht das Senden ohne Tx-Ready- oder Tx-Reg-free- -Interrupt?
Polling in der ISR?
TX-ISR in der RX-ISR?
An IRQ-Freigabe gedacht?

Schwer vorstellbar, dass das problemlos läuft.

Gruß Ralli

Vielleicht ist mein Vorstellungsvermögen auch nur gedämpft,
weil ich mit dem Kürzel MSP nicht so viel anfangen kann...

von Ralli (Gast)


Lesenswert?

Hab mal gegoogelt:

Es lassen sich "mit einem MSP Chip rund 46% Silikon-Grundfläche sparen".

Erleichtert das die Brustvergrößerung, oder wird die dadurch teurer?

von aha (Gast)


Lesenswert?

@Gast. Das wird so nichts. Vom Erzehlten war leider alles falsch.

von Ralli (Gast)


Lesenswert?

@ aha,

kannste bitte mal das Richtige erzEhlen?

von Gast (Gast)


Lesenswert?

Also Polling findet in der ISR nicht statt. Auch keine weiteren ISRs, 
lediglich wird in einer aufgerufenen Funktion das angesprochene Array 
mit Daten beschrieben und dann per UART verschickt. Das Senden der Daten 
geschieht mit Tx-Ready-Interupt.

von tek (Gast)


Lesenswert?

Siehe Interrupt.

Und wo ist jetzt dein Problem?

Nach der ISR ist der Stack wie vor der ISR... bis auf einen return Wert 
der da jetzt vielleicht auf dich wartet ;)

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Gast schrieb:
> Bei der
> Übergabe des Array bzw. einer Array-Elemente an Funktionen wird der
> Stack gefüllt richtig? Ist dieser dann wieder so leer wie vor dem
> ISR-Aufruf, sobald alle Vorgänge abgeschlossen sind?

Kann sein, vielleicht auch nicht.

Kommt drauf an in welcher Sprache du das hinschreibst:
   Assembler, C, C++, Ada, Java, Haskell, Fortran,
wie die Funktionen definiert sind und welches ABI (Application Binary 
Interface) ein evtl. verwendeter Compiler/Interpreter/Virtuelle Maschine 
implementiert.

Johann

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.