Hallo Leute! Ich arbeite mit einen Atmega1280 und ENC28J60. Ich habe die Bibliothek von Iain Derrignton benutzt, aber es läuft nicht gut. Wenn ich ein ARP-Packet (42 Bytes) vom µC sende, dann übertragt dieser das Paket zwar, aber leider mit einen Trailer (80 ~ 1600 Byte Gesamtgröße), siehe Anhang. Wenn ich ein ARP-Paket an den µC über Ethernet sende, dann wird dieses Paket völlig falsch beim µC empfangen. Weiß ihr wo kann das Problem liegen? Vielen Dank.
Gast
#2151900
Vielleicht ein Bufferoverflow. Ich würde im Sourcecode vor und nach jeden Puffer eine initialisierte, d.h. typische uint32_t Konstante setzen und aufpassen, ob die in dem Datagramm auftaucht. Das wäre dann der Hinweis, welcher Puffer überschiesst. Bsp:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
Bei dem Buffer uip_buf kann ein Problem auftauchen: In der Source wird der mit obiger Zeile definiert und mit folgender Zeile benutzt:
1 | |
Wenn UIP_LLH_LEN größer definiert ist als oben Elemente initialisiert werden, wird über die Arraygrenze hinaus zugegriffen. Ähnliche Stellen kommen noch weiter im Code vor z.B.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Mit uip_len habe ich an der Stelle Verständnisprobleme. Innerhalb MACWrite() an obiger Stelle ist das eine globale Variable. In dem von dir gezeigten Code ist weder die Definition zu sehen noch die Zuweisung, die letztlich einen Rückschluß auf den Inahlt an obiger Stelle erlaubt.
Vielen Dank von deine Antwort, ich werde jetzt der Bufferdebug probieren. Ich benutze auch den uIP TCP/IP stack von Adams Dunkel und uip_len ist in uip.c definiert.
Ich habe das Problem mit dem Senden gelöst. Die Ursache war, dass die Pointern falsch gesetzt waren. Jetzt muss ich herausfinden, warum das Empfangen von Packeten nicht funktioniert. Danke.
Gast
#2153290
Vielleicht weil es keine Packete sondern nur Pakete gibt?!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
