Gast
#44474
Hallo Leute! Ich bastle gerade eine zeitkritische Anwendung unter C mit dem Atmega8. Ich benutze den C-Compiler Codevision AVR. Es würde sich alles ausgehen, wenn da nicht folgendes wäre: Wenn ich z.B. bei PortB was hinausschicken möchte PORTB=0x00; ,dann benötigt das Programm 9 Takte. Folgender Assemblercode wurde dabei generiert: 99: PORTB=0x00; +0000005B: D067 RCALL +0x0067 Relative call subroutine Wenn ich aber auf PortC was hinausschicke dan benötigt der Kontroller nur 2 Takte. PORTC=0x00; Folgender Assemblercode wurde dabei erstellt: 91: PORTC=0x00; +00000058: 27EE CLR R30 Exclusive OR +00000059: BBE5 OUT 0x15,R30 Out to I/O location Meine Frage: Ist das ein Fehler vom C-Compiler oder braucht der Kontroller für PORTB immer 9 Takte? Warum sind hier zwei völlig verschiedene Anweisungen für zwei verschiedene PORTS? Bitte helft mir ich bin in Assembler nicht besonders Sattelfest. Danke für eure Hilfe. Martin!