16Bit TCNTx auslesen - ASM-Code vs. GCC-Compiler

Gast #363826
Lesenswert?
• ▲
▼
Hi.

Es geht um Codeoptimierung wegen Laufzeit..

Im Datenblatt des ATMega168 stehen auf Seite 106 Codeschnipsel zum
Auslesen des 16Bit Timerstands:

Assembler:
..
in r16,TCNT1L
in r17,TCNT1H
..

Der "in"-Befehlt braucht 1 Cycle

Für C steht als Beispiel:
..
int i;
i = TCNT1;
..

Nun zum eigentlichen Problem..

Der C-Code, wird nach dem compilieren zu folgendem:
..
lds r24,0x0084
lds r25,0x0085
..

Der "lds"-Befehl benötigt im Gegensatz zum "in"-Befehl 2 Cycles,
bis er abgearbeitet ist. Das gefällt mir schon mal nicht.
Wenn ich in C einen 8Bit Timer abfrage, dann kommt allerdings der
"in"-Befehl im Assembler-Code.. dh. der Compiler macht diesen
"Mist" nur beim 16Bit Timer..

Hat jemand ne Idee?

Wie müsste ich das r24 und r25 Register im C-Code ansprechen, falls ich
mich für Inline-Assembler entscheide, wenn das der einzigste Weg ist,
die 1-Cycle Befehle anstatt der 2-Cycle Befehle zu erhalten?

Danke im Vorraus
#363827
Lesenswert?
• ▲
▼
Der ATmega168 kann TCNT1 nicht mit in /out ansprechen. Das geht nur bis
zur I/O-Adresse 3Fhex.
Das Beispiel im Manual ist ein Bug, wahrscheinlich aus dem ATmega16
Manual kopiert. Bei dem lässt sich TCNT1 nämlich per in/out ansprechen.
Am besten gleich an Atmel weiterleiten.

Zum weiteren Verständnis:
schau Dir dazu die Header-Files iom32.h und iomx8.h in Deinem gcc-Dir
an:

#define TCNT1   _SFR_IO16(0x2C)    // mega16
#define TCNT1   _SFR_MEM16 (0x84)  // mega168

Viele Grüße, Stefan

Antwort schreiben

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.

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.