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
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...
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?
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.
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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.