Hallo Helmi,
Danke für die Antwort. Ich werde es nachher noch ausprobieren.
Allerdings ist es glaube ich etwas am Problem vorbei.
LocalIP und msg->yiaddr sind beides unsigned long. Wenn die UART-Routine
da ein Problem hätte, müßte sie doch bei beiden etwas falsches ausgeben.
Außerdem hatte ich das nur zur Fehlersuche. Das "Original"-Problem
war/ist, daß LocalIP später weiterverwendet wird und genau da der Fehler
auftauscht. Außerdem stimt die UART-Ausgabe mit dem überein, was übers
Netz geht.
N.B. Das ganze ist ähnlich schon gelaufen. Der DHCP lief die ganze Zeit
unter uIP. Jetzt stelle ich gerade auf meinen eigenen Stack um. Und
jetzt tritt der Fehler auf. Vorher var LocalIP vom Typ uip_ipaddr_t,
daher auch das memcpy().
Interrupts schließe ich aus, da das ganze Zeug in einem IRQ läuft und es
keine FIQs gibt. Stack-Problem eigentlich auch nicht, weil es 1. in
allen anderen Sockets funktioniert, und 2. LocalValue mitten in den
Daten steht. Davor und dahinter ist alles in Ordnung. Außerdem müßte der
Stack jetzt sogar kleiner sein, weil mein eigener IP-Stack 2 Tiefen
weniger braucht.
Habe probehalber auch mal den Bereich vor msg->yiaddr mit -1 gefüllt, um
zu sehen, ob er vielleicht "in die falsche Richtung" kopiert vom Zeiger
aus gesehen. Ist aber auch nicht so. Wenn ich LocalIP bei der
Initialisierung fest beschreibe, dann funzt es.
Alles sehr strange - wer hätte gedacht, daß ich jetzt schon für a=b zu
doof bin. :(