www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interups und Funktionsaufrufe


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Ralli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: aha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Gast. Das wird so nichts. Vom Erzehlten war leider alles falsch.

Autor: Ralli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ aha,

kannste bitte mal das Richtige erzEhlen?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tek (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.