Gast
#237447
Hi,
bin hier grad über eine merkwürdige Sache gestolpert. Folgendes simple
Programm:
#include <avr/io.h>
int main(void)
{
DDRB = 0xff;
while(1)
{
PORTB=0x00;
PORTB=0xff;;
}
}
Erzeugt bei Opt = -O2 folgenden ASM Code
while(1)
{
PORTB=0x00;
9a: 18 ba out 0x18, r1 ; 24
PORTB=0xff;;
9c: 88 bb out 0x18, r24 ; 24
9e: 18 ba out 0x18, r1 ; 24
a0: 88 bb out 0x18, r24 ; 24
a2: fb cf rjmp .-10 ; 0x9a
D.h. er verdoppelt das ganze was auch am Oszi zu sehen ist. Bei Opt =
-O1 oder -Os macht er es richtig.
while(1)
{
PORTB=0x00;
9a: 18 ba out 0x18, r1 ; 24
PORTB=0xff;;
9c: 88 bb out 0x18, r24 ; 24
9e: fd cf rjmp .-6 ; 0x9a
Will jetzt nicht kleinlich sein, bin aber neugierig warum...