text = text + strlen_P(PSTR("Config:")) ;
Das kannst du auch auf text += 7 vereinfachen wenn du willst
Du solltest vor dem Abspeichern überprüfen ob die Zeilennummer innerhalb der Array Grenze liegt. Kann es sein, dass du da mehr als 4 eingegeben hast? Solche Puffer-Überlaufe können tödlich sein, da du damit Variablen nach dem Array im Speicher überschreibst.
Hängt er sich auch auf wenn du nicht in das Array schreibst? Vielleicht mal versuchen etwas weiter einzugrenzen woran es genau liegt.
Ansonsten würde ich noch die _P Version von str(n)cmp() nehmen. z.B.:
if (strcmp_P(text, PSTR("Name:"))==0)
Spart jedesmal ein wenig RAM, da die String Konstanten beim Start nicht dauerhaft ins RAM kopiert werden. Geht genauso mit strncmp_P()
Genauso kannst du bei den print() Anweisungen (und nur da!) das machen:
Serial.println(F("Hadware Reset"))
Durch das F() bleiben die Strings dann auch im Flash. Das ist ein Arduino Konstrukt, das mit print() und println() geht. Und nur mit Strings-Konstanten. Nicht Variablen anderer Art.
Das hat aber nichts mit dem Absturz zu tun