Väckarklocka med Tetris att bevisa att du är vaken (11 / 16 steg)
Steg 11: fel;
fel;
var vill jag ett fel att inträffa. Det definieras som
#define fel print_error(250,__LINE__)
och print_error (var, line_number) gör den faktiska visning och frysning. Så använder jag "fel;" om jag inte vill visa en viss variabel och "print_error()" om jag gör.
Det blir mer besvärlig eftersom Arduino miljö lägger till en massa funktion prototyper i början av din fil när den sammanställer. Även om det är skönt att inte behöva skriva ut funktionen prototyper det röra upp mitt fel; funktionalitet. Jag gör numret korrekt genom att subtrahera en konstant som jag kallar ARDUINO_OFFSET. Detta är antalet funktioner än setup() och loop(). Är det ofta enklast att avgöra genom att avsiktligt orsakar ett fel och se hur mycket radnumret är avstängd. Jag har också flera filer som Arduino miljö helt enkelt sammanfogar tillsammans. Så har jag följande i slutet av min största fil:
#define FILE_LENGTH 1153
Det är bara längden på filen, numret på sin linje. Så skriver min fel rutin ut både standard radnumret och radnumret minus FILE_LENGTH. Om första numret är för stor för huvudfilen sedan leta efter andra numret i den andra filen.
Ja vet jag att jag sa "lätt" i första meningen i detta steg och det är faktiskt ganska invecklad. Efter att du får det arbetar den enkla biten är bara att lägga till "fel;" var ett fel skulle inträffa. Det sparar en massa tid och främjar robust kod.