Mijn eerste gok is verkeerd. Ik had gedacht dat het gewoon zou terugkeren van de lus en de kernbibliotheek zou gewoon lus () opnieuw aanroepen. Ik zie echter dat de volgende code is gemaakt. Merk op dat __stop_program een harde lus is ...
Een uittreksel van de lijst van Blink.ino, met exit (0) toegevoegd:
// de lusroutine loopt over en opnieuw voor altijd: void loop () {digitalWrite (led, HIGH); // zet de LED aan (HOOG is het spanningsniveau) vertraging (1000); // wacht op een tweede digitalWrite (led, LOW); // schakel de LED uit door de spanning LOW te vertragen (1000); // wacht op een tweede exit (0);}
De demontage van het bovenstaande:
// de lusroutine wordt voor altijd opnieuw en opnieuw uitgevoerd : void loop () {digitalWrite (led, HIGH); // zet de LED aan (HIGH is het spanningsniveau) 100: 80 91 00 01 lds r24, 0x0100 104: 61 e0 ldi r22, 0x01; 1106: 0e 94 ca 01 bel 0x394; 0x394 <digitalWrite> vertraging (1000); // wacht op een tweede 10a: 68 ee ldi r22, 0xE8; 232 10c: 73 e0 ldi r23, 0x03; 3 10e: 80 e0 ldi r24, 0x00; 0110: 90 e0 ldi r25, 0x00; 0112: 0e 94 f7 00 bel 0x1ee; 0x1ee <delay> digitalWrite (led, LOW); // schakel de LED uit door de spanning LAAG te maken 116: 80 91 00 01 lds r24, 0x0100 11a: 60 e0 ldi r22, 0x00; 0 11c: 0e 94 ca 01 bel 0x394; 0x394 <digitalWrite> vertraging (1000); // wacht op een tweede 120: 68 ee ldi r22, 0xE8; 232122: 73 e0 ldi r23, 0x03; 3124: 80 e0 ldi r24, 0x00; 0 126: 90 e0 ldi r25, 0x00; 0 128: 0e 94 f7 00 bel 0x1ee; 0x1ee <delay> exit (0); 12c: 80 e0 ldi r24, 0x00; 0 12e: 90 e0 ldi r25, 0x00; 0
130: 0e 94 1e 02 bel 0x43c; 0x43c <_exit> ... 0000043c <_exit>: 43c: f8 94 cli0000043e <__stop_program>: 43e: ff cf rjmp.-2; 0x43e <__stop_program>
Merk op dat als _exit cli niet had aangeroepen, interrupts dingen zouden kunnen doen. Maar dat is niet het geval.