Hallo,
ich versuche mich gerade am uIP Stack von Adam Dunkel in der Version
1.0, bzw. dessen Portierung für AVR von:
http://code.google.com/p/avr-uip
Uart Bibliothek ist von Peter Fleury und
Das ganze läuft auf dem AVR-NetIO von Pollin mit einem Atmega644P
(besser gesagt es sollte darauf laufen).
Die Beispiele mit telnet und dem einfachen Webserver funktionieren und
nach dem Start wird beim Ping die ersten 1-2x Time Out gemeldet, danach
funktioniert pingen aber bis zum nächsten Reset einwandfrei.
Das eigentliche Problem liegt beim eigenständigen Aufbau einer
Verbindung zu einem anderen PC. Nach dem uip_connect(...) wird als
nächstes das Flag von uip_timout() gesetzt und Wireshark zeigt auch
keine Packete mit einem Verbindungsversuch an.
Der Compiler (AVR Studio V. 4.18 Build 700, WinAVR 20100110) spuckt
folgende Fehler/Warnungen aus:
1 | ../main.c: In function 'main':
|
2 | ../main.c:48: warning: integer overflow in expression
|
3 | ../main.c:49: warning: integer overflow in expression
|
4 | ../main.c:53: warning: missing braces around initializer
|
5 | ../main.c:53: warning: (near initialization for 'mac.addr')
|
6 | ../psock.c: In function 'psock_send':
|
7 | ../psock.c:188: warning: pointer targets in assignment differ in signedness
|
8 | ../psock.c: In function 'psock_readto':
|
9 | ../psock.c:276: warning: pointer targets in passing argument 2 of 'buf_setup' differ in signedness
|
10 | ../psock.c: In function 'psock_readbuf':
|
11 | ../psock.c:303: warning: pointer targets in passing argument 2 of 'buf_setup' differ in signedness
|
12 | ../psock.c: In function 'psock_init':
|
13 | ../psock.c:334: warning: pointer targets in passing argument 2 of 'buf_setup' differ in signedness
|
14 | ../uip.c:1847: warning: label 'ip_send_nolen' defined but not used
|
Alle Warnungen beziehen sich auf Code-Fragmente die vom uIP Stack direkt
oder dessen Portierung stammen und von mir übernommen wurden. Ein
möglicher Fehler könnte die Zeit (Integer Overflow bei CLOCK_SECOND)
sein mit der der Stack in main über Timer aufgerufen wird, empfohlen
werden so wie ich das verstanden habe 500ms. Durch den Overflow liegt
das eher bei 1<ms, aber auch wenn ich über #define die Konstante manuell
setze (auf 16M/(1024*255) = 61 ) erhalte ich nur uip_timedout() ohne
Pakete im Äther.
Ein Stack-Überlauf erscheint unwahrscheinlich:
1 | AVR Memory Usage
|
2 | ----------------
|
3 | Device: atmega644p
|
4 |
|
5 | Program: 14096 bytes (21.5% Full)
|
6 | (.text + .data + .bootloader)
|
7 |
|
8 | Data: 1222 bytes (29.8% Full)
|
9 | (.data + .bss + .noinit)
|
Im Anhang sind die relevanten C-Dateien, ich hoffe jemand findet die
Zeit mir bei meinem Problem zu helfen.