Hallo, ich habe ein Freertos mit dem Webserver Beispiel für den LPC1768 am laufen und es funktioniert auch, jetzt ist mir aber aufgefallen, dass wenn ich mir den Ping in Wireshark anschaue ich dopelte Replys bekomme (in der eingabeaufforderung sehe ich das nicht, unter Linux schon :-P ). Das rührt wohl daher, dass uIP im EMAC_ISR den Reply erneut versendet. Entferne ich dort die Zeile: // TX_DESC_PACKET( ( emacTX_DESC_INDEX + 1 ) ) = TX_DESC_PACKET( emacTX_DESC_INDEX ); bekomme ich nur einen Reply ABER ich erhalte zwischen REquest und reply einen Frame voller 5en. Das komische ist, dass wenn ich sage das die Länge der Daten nicht mehr größer als 0 ist (im Code steht man KANN das dazu benutzen um die Daten ein zweites mal zu senden) erhalte überhaupt keine Replys mehr..... Kennt sich jemand näher mit uIP aus und kann mir helfen?
Gast
#2634257
das doppelte Senden ist ein bekanntes und auch dokumentiertes Feature der uIP Lib. Damit wird der Naggle Algorithmus ausgetrickst der in vielen Betriebssystemen läuft und kleinere Pakete erst sammelt bevor sie quittiert werden. Durch das doppelte Senden werden die Pakete im TCP Stream dann sofort quittiert, ansonsten wird die Quittierung meist 200 ms zurückgehalten. Wenn man das in der LPC FreeRTOS/uIP Implementierung auskommentiert muss man noch an einer anderen Stelle eingreifen weil da mit zwei Buffern gearbeitet wird die immer im Wechsel benutzt werden.
Ja genau, aber WO muss ich da einfreifen? bzw WIE?
Gast
#2634277
habe die mod. emac.c mal angehängt, in der vSendEmacTxData() habe ich etwas verdreht. Nachtrag: ich habe das auf dem LPCXpresso mit LPC1769 gemacht, der hat den PHY LAN8720. Das musst du evtl. anpassen wenn du einen anderen hast. Die Initialisierung war auch nicht ganz richtig, lief glaube ich nicht mit 10 MBit in den älteren Beispielen. in emac.h noch hinzufügen:
1 | |
2 | |
3 | |
4 | |
5 | |
Vielen vielen Dank, Du hast mir gerade den Tag und damit auch das ganze Wochenende gerettet! Läuft wunderbar. DANKE...............WUHU!!!!
Das hatte ich schon alles erledigt, bei mir ist ein LPC1758 drin und ein LAN8710i :-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.