- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 11

Thema: Ethernet-Frame empfangen von ENC28J60 analysieren

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.01.2012
    Beiträge
    75
    Okay, also ich habe den ARP-Request in meinem Programm in einer Tabelle verarbeitet und meinem Rechner einen ARP-Reply zurückgegeben.
    Natürlich in dem vorgegebenen Muster.
    Sobald ich ihm den Reply geschickt habe, meckert er auch nicht direkt, dass er keine Verbindung aufbauen kann, aber er schickt auch kein Frame mehr in dem er eine Anfrage mit Portnummer und IP sendet. Sollte er das nicht eigentlich tun, oder muss ich nach dem ARP-Reply noch einen weiteren Frame senden???
    Komme leider nicht mehr weiter =(
    Ich habe das so verstanden, dass der Client (Rechner) doch eine Verbindung mit dem Server anfragen soll...
    Hat jemand einen Tip?

    Danke =)

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von pete1612 Beitrag anzeigen
    Natürlich in dem vorgegebenen Muster.
    Und genau da würde ich erst mal ansetzen. Hast du das überprüft? Hast du auf dem PC mal einen Sniffer laufen lassen, um zu sehen, was da tatsächlich ankommt?
    MfG
    Stefan

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    09.01.2012
    Beiträge
    75
    Okay, mit Wire Shark hbae ich gesehen, dass tatsächlich ein TCP-Paket vom Laptop aus gesendet wurde.
    Der Fehler lag banalerweise an meiner MAC-Adresse. Sie steht "verkehrtherum" im ENC28J60 und meine Konstante im Programm ist dann falsch und das ARP-Paket wurde dann falsch gesendet und blabla...Der ENC hat dann das Paket einfach nicht mit seiner MAC-Adresse identfiziert und nicht im Buffer abgelegt...
    Jetzt gehts weiter mit Schritt zwei...TCP Paket annehmen, auswerten und beantworten...Mal sehen. Danke nochmal für deinen Tip!

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    09.01.2012
    Beiträge
    75
    Kleine Frage am Rande....ich habe eine Struktur, ungefähr in diesem Schema:

    struct{
    unsigned char source_ip[4];
    unsigned char dest_ip[4];
    unsigned char flags[2];
    }ip;

    Wie kann man z.B. seine eigene IP platzsparend in die Struktur speichern ohne jedes char einzeln in die Struktur zu schreiben und ohne string.h?

    Ich habe es bisher so gemacht:

    while(x<4){
    ip.source_ip[x]=my_ip[x];x++}

    Kann man das nicht irgendwie uber eine Adresse machen????

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von pete1612 Beitrag anzeigen
    Wie kann man z.B. seine eigene IP platzsparend in die Struktur speichern ohne jedes char einzeln in die Struktur zu schreiben und ohne string.h?
    Und warum diese Einschränkungen? Beide von dir ausgeschlossenen Lösungen
    Code:
    ip.source_ip[0] = my_ip[0];
    ip.source_ip[1] = my_ip[1];
    ip.source_ip[2] = my_ip[2];
    ip.source_ip[3] = my_ip[3];
    
    memcpy(ip.source_ip,my_ip,4);
    liefern ein praktisch optimales Ergebnis. Was ist dein Problem damit? Nicht "cool" genug?


    Kann man das nicht irgendwie uber eine Adresse machen????
    Und was soll daran dann besser sein? Letztendlich müssen die Bytes von A nach B kopiert werden, und auch bei einer Pointer-Lösung geschieht das nicht auf magische Weise, sondern Byte für Byte.
    Geändert von sternst (17.01.2013 um 12:54 Uhr)
    MfG
    Stefan

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    09.01.2012
    Beiträge
    75
    Und warum diese Einschränkungen?
    Weil ich versuche auf Header, wie string.h zu verzichten, aufgrunddessen, weil es halt relativ viel Speicher in Anspruch nimmt. Oder liege ich da falsch?

    Nicht "cool" genug?
    Mh ja...vielleicht schon, denn nach Möglichkeit sollte der Code übersichtlich sein und ein großer Freund von Schleifen, wie while() und for() bin ich eigentlich nicht.
    Kann ja durchaus sein, dass jemand einen effektiveren Lösungsvoschlag hätte als eine Schleife. Aber sicherlich hast du Recht...das Byte muss sowieso von links nach rechts geschubst werden, ob auf die eine oder andere Art und Weise.
    Bin jemand der gerne dazulernt und sich ansieht, wie andere solche Probleme lösen. Hätte das am Anfang nicht für möglich gehalten, aber es ist tatsächlich so, dass man sich beim
    Programmieren in C eine eigene "Handschrift" zulegt...

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von pete1612 Beitrag anzeigen
    Weil ich versuche auf Header, wie string.h zu verzichten, aufgrunddessen, weil es halt relativ viel Speicher in Anspruch nimmt. Oder liege ich da falsch?
    Ja. Ein Header belegt selbst gar keinen Speicher. Wenn du string.h einbindest und memcpy benutzt, dann wird dein Code etwas größer, und zwar genau um den Teil den der Code von memcpy benötigt.

    Und wenn du dazu noch 25 weitere Header einbindest ohne was daraus zu benutzen, wird dein Code dadurch um genau 0 Byte größer.
    MfG
    Stefan

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von pete1612 Beitrag anzeigen
    Kleine Frage am Rande....ich habe eine Struktur, ungefähr in diesem Schema:

    struct{
    unsigned char source_ip[4];
    unsigned char dest_ip[4];
    unsigned char flags[2];
    }ip;
    Kann man nicht einfach ein uint32_t als ip-Adresse nehmen (und ein uint16_t als Port)? Dann ist die Zuweisung ein =, der Vergleich ein ==. Und wenn man mit Netzmaske oder Broadcastadresse arbeiten muß, passen Bitoperationen. Für die Umwandlung vom Leitungscode zum uint32_t bzw. unint16_t gibt es Funktionen wie ntohl() .

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

Ähnliche Themen

  1. XMega und Ethernet mit ENC28J60
    Von ChRiZ im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 12.12.2012, 22:38
  2. [ERLEDIGT] Stacks und Frame ?
    Von PICture im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 09.12.2011, 17:10
  3. Dateirestsystem analysieren
    Von Furtion im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 20.12.2010, 00:11
  4. Ethernet-Bootloader für Atmega32+ENC28J60
    Von xlanhackerx im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 27.01.2009, 13:56
  5. USB Frame-Grabber mit Mikrocontroller nutzen
    Von mwoidt im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 01.10.2006, 19:53

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test