Webserver hängt sich aus

Sepron:
Verstehe ich leider nicht. Wie muss ich den Code umschreiben, dass er nicht in fremde Datenbereiche schreibt?

Siehe Vorschlag von Michael.

Beim nochmaligen Drüberschauen über Deinen Code habe ich gesehen, dass Du doch an einer Stelle noch etwas gegen das Schreiben über das Arrayende eingebaut hast, und zwar scheinst Du die Schleife bei Überschreiben einer bestimmten Länge zu unterbrechen:
if (nCommandPos > 30) ...

Aber der ganze Aufbau von Datenstruktur und Programmlogik scheint mir völlig verquer zu sein:

char*  httpServer()
...
char sReturnCommand[32];
...
return sReturnCommand

Rückgabewert für die Funktion httpServer() soll ein Ponter sein.
Du deklarierst innerhalb der Funktion ein Char-Array (Gültigkeit des Char-Arrays also nur innerhalb der Funktion)
Und lieferst einen Pointer auf das Char-Array zurück.

Wenn Du hinterher irgendwelche Aktionen mit dem auf diese Art zurückgelieferten Pointer ausführst, z.B. Stringvergleiche, dann ist nicht sichergestellt, dass da das abläuft, was ablaufen soll. Da das definierte Array mit verlassen der Funktion ungültig geworden ist, ist der der Speicherbereich danach als frei gekennzeichnet. Der nächste auftretende Interrupt kann genau diesen frei gewordenen Speicherbereich wieder für etwas anderes verwenden.

Das sieht für mich völlig fehlerhaft programmiert aus, wenn Du versuchst mit Pointern auf ungültig gewordene Variablenbereiche außerhalb des Gültigkeitsbereichs zuzugreifen.

Das würde ich jedenfalls nochmal überprüfen, wo Du möglicherweise mit Pointern auf RAM-Speicher zugreifst, dass das alles seine Richtigkeit hat.