Gast
#363826
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