Davon ab, dass goto von den meisten Programmierern eher nicht so gerne
gesehen wird (Stichwort: Spaghetticode) und dass sich mir der Sinn nicht
erschließt, wieso du den Wert in den eeprom schreibst um ihn später in
einer anderen Funktion wieder auszulesen (reichen keine normalen
Variablen dafür? EEPROM ist langsam und hat eine begrenzte Anzahl an
Schreibzugriffen).
Dein letztes else if:
1 | else if((buf[0] != '6') && (buf[0] != '5') && (buf[0] != '4') && (buf[0] != '3') && (buf[0] != '2') && (buf[0] != '1') && (buf[0] != 'E')){send("Unbekannter Befehl abfrage startet neu\r\n"); /*goto start;*/}
|
kann man auch so schreiben:
1 | else if(buf[0] != 'E'){send("Unbekannter Befehl abfrage startet neu\r\n"); /*goto start;*/}
|
Wäre buf[0]== '4', wäre er bereits oben in das else if gegangen. Da er
nicht dort rein ging und statt dessen die weiteren else ifs testet,
weißt du, dass buf[0] != '4' sein muss wenn er unten ankommt.
So, und im Timeout-Fall ist buf[0] != 'E' und damit geht er dort rein.
Denk mal, da musst du den Timeout gesondert abfangen. ZB oben direkt als
erstes if ein if(state==0).