mikrocontroller.net

Forum: Compiler & IDEs avr-gcc: schreiben von 16-Bit Werten in 16-Bit Portregister


Autor: Stefan May (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich frage mich gerade, ob ich mich auf ein Verhalten des gcc verlassen
darf. Wenn ich schreibe TCNT1=0x400, dann setzt der gcc das in
folgenden Assembler um

 25a:   3d bd           out     0x2d, r19       ; 45
 25c:   2c bd           out     0x2c, r18       ; 44

Ist es schlau, sich darauf zu verlassen, daß erst das High Register
beschrieben wird? Oder sollte man das aufteilen in

TCNT1H = 0x4;
TCNT1L = 0x0;

ciao, Stefan

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da würd ich mich einfach mal drauf verlassen!

Aber aufpassen!
Das ist nicht Interrupt-Save!

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber die Lösung mit
TCNT1H = 0x4;
TCNT1L = 0x0;
verhält sich bei einem Interrupt auch nicht besser, als schreib ruhig

TCNT1=0x400

Das der Compiler das richtig macht ist in der Doku dokumentiert.

Du kannst natürlich vorher global die Interrupts abschalten und danach
wieder einschalten.

Autor: Stefan May (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem Interrupt war mir schon klar. Man darf sowieso von keinem
C-Statement ausgehen, daß es in einem Zyklus abgearbeitet wird. Solche
Sachen muß man dann mit Zugriffsmechanismen schützen. Stichwort:
Semaphore oder die ganz harte Methode, Interrupts abschalten.

Wenn das so dokumentiert ist, dann darf man sich darauf auch verlassen.


ciao, Stefan.

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.