sodjan: Har testat med och utan:
Och du har rätt, se nedan:
Utan
asm NOP i while(1)
Kod: Markera allt
int main ( void )
{
de: 89 b7 in r24, 0x39 ; 57
e0: 81 64 ori r24, 0x41 ; 65
e2: 89 bf out 0x39, r24 ; 57
// Setup timer0
TIMSK |= (1 << TOIE0); // Enable timer0 overflow interupt.
TCCR0 |= (1 << CS00); // CK/1
e4: 83 b7 in r24, 0x33 ; 51
e6: 81 60 ori r24, 0x01 ; 1
e8: 83 bf out 0x33, r24 ; 51
TCNT0= 0; // set timer counter to 0;
f0: 12 be out 0x32, r1 ; 50
sei(); //Enable interupts.
f4: 78 94 sei
DDRB = 0xFF; // Configure PortB as output
f6: 8f ef ldi r24, 0xFF ; 255
f8: 87 bb out 0x17, r24 ; 23
PORTB = 0xFF;
fa: 88 bb out 0x18, r24 ; 24
fc: ff cf rjmp .-2 ; 0xfc <main+0x1e>
och med asm volatile ("nop":: );
Kod: Markera allt
int main ( void )
{
de: 89 b7 in r24, 0x39 ; 57
e0: 81 64 ori r24, 0x41 ; 65
e2: 89 bf out 0x39, r24 ; 57
// Setup timer0
TIMSK |= (1 << TOIE0); // Enable timer0 overflow interupt.
TCCR0 |= (1 << CS00); // CK/1
e4: 83 b7 in r24, 0x33 ; 51
e6: 81 60 ori r24, 0x01 ; 1
e8: 83 bf out 0x33, r24 ; 51
TCCR2 |= (1 << CS22)|(1 << COM20); // CK/64 (1 << CS21)|
ea: 85 b5 in r24, 0x25 ; 37
ec: 84 61 ori r24, 0x14 ; 20
ee: 85 bd out 0x25, r24 ; 37
TCNT0= 0; // set timer counter to 0;
f0: 12 be out 0x32, r1 ; 50
sei(); //Enable interupts.
f4: 78 94 sei
DDRB = 0xFF; // Configure PortB as output
f6: 8f ef ldi r24, 0xFF ; 255
f8: 87 bb out 0x17, r24 ; 23
PORTB = 0xFF;
fa: 88 bb out 0x18, r24 ; 24
while (1)
{
asm volatile ("nop"::);
fc: 00 00 nop
fe: fe cf rjmp .-4 ; 0xfc <main+0x1e>
Som synes försvinner while(1) {} helt och hållet.
Kanske skall tillägga att kodsnuttarna är hämtade från .lss-filen som WinAVR skapar vid kompilering av C-koden.