avr-gcc: schreiben von 16-Bit Werten in 16-Bit Portregister

Gast #179345
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
Gast #179347
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.
Gast #179348
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.