Re: [ethersex-devel] Problem with YPort
Hi! > Habe weitere Tests gemacht: yport_rxstart wird erst gar nicht aufgerufen > beim Empfangen des dritten Paketes (habe einen Counter mitlaufen lassen > den ich in die ersten 4 Bytes jedes Antwort Paketes reingefummelt habe...) > > D.h. uip_newdata() liefert 0 beim dritten Paket... habe das auch mal > debugged, und ja, es wird wirklich beim dritten Paket nicht aktiv (und > beim fünften, siebten, usw...) Ich habs gefixt. Es läuft nun alles wie gewünscht und sehr flott: 1.97msec für 4 bytes, keine drops. Würde mich freuen wenn es jemand eincheckt, bin noch nicht so fit mit git (oder es mir kurz erklärt wie ich ein request mache, würde mich auch freuen). (Fehler war: else if (uip_newdata()) übersprang einfach die neuen Daten wenn gleichzeitig ein anderes Event war (z.B. ACK von gesendeten Daten - was damit nix zu tun hat!!!)) Ich denke, das ist nie aufgefallen weil es nur passiert wenn im exakt gleichen Moment Daten ankommen und geschickt werden (loopback oder sehr schnelles Protokoll). Gefunden habe ich den Fehler übrigens weil ich mir den Code vom Telnet und I2C Slave Protocol angeguckt habe... da ist übrigens richtig ;-) Ach ja, hier ist es eventuell auch falsch: protocols/ems/ems_net.c: } else if (uip_newdata()) { protocols/modbus/modbus_net.c: } else if (uip_newdata()) { protocols/mqtt/mqtt.c: else if (uip_newdata() && uip_len) { protocols/irc/irc.c:else if (uip_newdata() && uip_len) { protocols/bsbport/bsbport_net.c: else if (uip_newdata()) MQTT und ModBus gucke ich mir später eventuell noch an, da ich die selbst in meinem Haus als Bus verwende und dafür auch den EtherSex testen wollte. Aber ich denke "else" dort überall wegzunehmen sollte ok sein... diff --git a/protocols/yport/yport_net.c b/protocols/yport/yport_net.c index 6eb27a8..a1a10cf 100755 --- a/protocols/yport/yport_net.c +++ b/protocols/yport/yport_net.c @@ -85,8 +85,10 @@ yport_net_main(void) if (yport_conn == uip_conn) yport_conn = NULL; } - else if (uip_newdata()) + + if (uip_newdata()) { + if (uip_len <= YPORT_BUFFER_LEN && yport_rxstart(uip_appdata, uip_len) != 0) { -- Michael ___ Ethersex-devel mailing list Ethersex-devel@list.zerties.org http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel
Re: [ethersex-devel] Problem with YPort
Hi! Habe weitere Tests gemacht: yport_rxstart wird erst gar nicht aufgerufen beim Empfangen des dritten Paketes (habe einen Counter mitlaufen lassen den ich in die ersten 4 Bytes jedes Antwort Paketes reingefummelt habe...) D.h. uip_newdata() liefert 0 beim dritten Paket... habe das auch mal debugged, und ja, es wird wirklich beim dritten Paket nicht aktiv (und beim fünften, siebten, usw...) -- Michael ___ Ethersex-devel mailing list Ethersex-devel@list.zerties.org http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel
Re: [ethersex-devel] Problem with YPort
Hi! Wenn ich die serielle Schnittstelle zu mache nach einem Send/Receive, dann kann ich mit beliebiger Speed das tun. Nur wenn ich sie offen lasse, dann passiert das. Ändert sich was wenn du die Baudrate der seriellen Schnittstelle veränderst? 9600 und 115200 getestet. No change. -- Michael ___ Ethersex-devel mailing list Ethersex-devel@list.zerties.org http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel
Re: [ethersex-devel] Problem with YPort
Hallo Michael :-) > mit wieviel Ticks/s hast du getestet? Standardeinstellung 50? Dann > sollte auch mit dem neuen Timer Framework das gleiche rauskommen. > Dreh doch bitte mal die "Periodic ticks per second" hoch, Größenordnung > 500 Hz oder mehr, und wiederhole den Test. Ok, habe ich gemacht (500): Es ändert sich garnichts. Wenn ich nicht ziemlich genau 40msec zwischen den Requests warte droppt er die Pakete. Zusätzlich habe ich eine andere Linux Distro probiert - absolut gleicher Effekt. Um Python auszuschließen habe ich den Test in C geschrieben - exakt gleiches Resultat. Zwei Pakete gehen durch, drittes wurde gedroppt. Und zum Schluß habe ich alles noch wiederholt mit einer zweiten Hardware - einem Pollin NetIO (mit Original MEGA32) - der *exakt* das gleiche Phänomen zeigt. Ich glaube jetzt habe ich restlos alles ausgeschlossen: Branches, Client OS, Hardware und Client Software. Zusätzlich habe ich noch andere Tests gefahren: Wenn ich die serielle Schnittstelle zu mache nach einem Send/Receive, dann kann ich mit beliebiger Speed das tun. Nur wenn ich sie offen lasse, dann passiert das. Außerdem kann ich per ECMD auf Port 2701 auch mit beliebiger Speed Kommandos absetzen: Alle kommen an und werden umgesetzt (Durschnittliche Zeit: 2,4msec bei meinen Tests - also deutlich schneller als 40msec). Ich habe auch ein bisschen gestöbert in yport*.c und habe die Funktion yport_rxstart gefunden, die im zweiten if Teil gar kein ISR Lock macht - damit könnte doch theoretisch die Interruptroutine Daten falsch senden während dem memmove? Ich habe mal einen provisorischen semlock drum gebastelt -> hat aber nix geholfen. Denke, der Fall wird auch nur sehr selten passieren. Aber genau dieser Teil müsste bei mir benutzt werden: Ich schreibe ja so schnell, dass er dort umkopieren muss weil er vorher noch nicht fertig ist, aber schon ein paar Bytes gesendet hat. Ich bin ratlos und kurz davor, das YPort von Ethersex mit uip selbst nach zu schreiben... :-( Bringt mir aber auch nicht viel, ich brauche auch den Rest von EtherSex... -- Michael ___ Ethersex-devel mailing list Ethersex-devel@list.zerties.org http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel
Re: [ethersex-devel] Problem with YPort
Am 24.10.2015 um 12:33 schrieb Michael Späth: Wenn ich die serielle Schnittstelle zu mache nach einem Send/Receive, dann kann ich mit beliebiger Speed das tun. Nur wenn ich sie offen lasse, dann passiert das. Ändert sich was wenn du die Baudrate der seriellen Schnittstelle veränderst? Gruß Udo ___ Ethersex-devel mailing list Ethersex-devel@list.zerties.org http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel