mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C Fehler aber was bedeuten sie? ENC28J60


Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen...

Ich versucher derzeit gerade den ENC28J60 zusammen mit einem Launchpad 
zum laufen zu bringen...

Dazu habe ich folgendes Beispiel verwendet...

Beitrag "ENC28J60 Basics[Beispielprogramm in AVRGCC für atmega8]"

Da dieses ursprünglich für AVR gedacht war, musste ich einiges ändern.

Nun bin ich soweit, das es nur noch ein paar einzelne Fehler gibt..
Jedoch habe ich leider keine Ahnung wie ich diese ausbessern kann...

Hier nun also die Liste:
Die Linien angaben sind Richtwerte, da ich ja etwas verändert habe!

Datei Stack.c Linie 108
arp = (struct ARP_Header *)&buff[21];
Fehler: a value of type "struct ARP_Header *" cannot be assigned to an 
entity of type "struct ARP_header *"


Datei Stack.c Linie 131
icmp = (struct ICMP_Header *)&buff[34];
Fehler: a value of type "struct ICMP_Header *" cannot be assigned to an 
entity of type "struct ICMP_header *"

Datei Stack.c Linie 88
ip = (struct IP_Header *)&buff[24];
Fehler: a value of type "struct IP_Header *" cannot be assigned to an 
entity of type "struct IP_header *"


Datei Stack.c Linie 149
udp = (struct UDP_Header *)&buff[34];
Fehler: a value of type "struct UDP_Header *" cannot be assigned to an 
entity of type "struct UDP_header *"


Datei main.c Linie xyz
nicSetMacAddress(mymac);
Fehler: argument of type "volatile unsigned char *" is incompatible with 
parameter of type "unsigned char *"

Ich hoffe ihr seht hier wo der Fehler liegt...


Danke schonmal

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das klingt sehr wirr. Könnte es sein, daß die jeweiligen Strukturen 
tatsächlich typedefs sind?

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rufus Τ. Firefly schrieb:
> Das klingt sehr wirr. Könnte es sein, daß die jeweiligen Strukturen
> tatsächlich typedefs sind?

Hmmm :)

Also ich habe die header dateien 1:1 übernommen...
Ich habe lediglich u8 und uint8_t in unsigned char
und u16 - uint16_t in unsigned int umbenannt.

Ansonsten ist alles genau das selbe...

Hier ein Beispiel aus der Header Datei
struct UDP_header{
  unsigned int UDP_sourcePort;  
  unsigned int UDP_destPort;
  unsigned char UDP_lenght_h;
  unsigned char UDP_lenght_l;
  unsigned int UDP_checksum;
};
extern void udp(unsigned int len, unsigned char *buff);

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das klingt in der Tat sehr wirr.
Zeig mal alles, so wie es jetzt aussieht.

Autor: Claudio H. (hedie)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier alle Sourcen

Vielen Dank für deine Hilfe!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm.
Ich seh beim besten willen nicht, was der Compiler hier
/*Funktion um den IP Header zu erzeugen
####################################################################################*/
void ip(unsigned char *buff){
  struct IP_header *ip;
  unsigned int sum;
    unsigned char a = 0;
  
  ip = (struct IP_Header *)&buff[24];
    
  for(a=0;a<4; a++)
  {    
    ip->IP_destIp[a] = ip->IP_sourceIp[a];
    ip->IP_sourceIp[a] = myip[a];
  }


  ip->IP_checksum = 0x00; // checksum auf null setzen
  sum = checksum(&buff[14],0x00000000,20); // checksumme ausrechnen
  
  ip->IP_checksum = ((sum & 0xFF00) >> 8)|((sum & 0x00FF)<<8); 
}

mit
a value of type "struct IP_Header *" cannot be assigned to an entity of 
type "struct IP_header *"
meinen könnte. Soweit ich sehen kann, ist das auch kein dubioser 
Folgefehler.

Hast du noch andere Fehlermeldungen davor?

Muss mir das ganze mal hier in in Projekt umsetzen und durch den 
Compiler jagen. Mal sehen was der gcc dazu zu sagen hat.

Autor: Claudio H. (hedie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Hast du noch andere Fehlermeldungen davor?

Vielen Dank für deine Mühe... Nein... Die Fehlermeldungen Sind so in der 
Reihenfolge vorhanden wie ich sie im ersten Thread gepostet habe...

Ich finde es ja auch etwas merkwürdig...

Im schlimmsten Falle.. Lasse ich einfach diesen Stack weg und verwende 
einen anderen...

Das wichtigste ist ja die enc28j60.c diese läuft ja... Aber wäre halt 
schon toll wenn es gleich so funktionieren würde...

Danke schon mal.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde es mal mit der korrekten Groß- und Kleinschreibung probieren.

Autor: Udo Schmitt (urschmitt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> a value of type "struct IP_Header *" cannot be assigned to an entity of
> type "struct IP_header *"

Einmal ist Header mit großem H und einmal mit kleinem h!

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Fehler: argument of type "volatile unsigned char *" is incompatible with
> parameter of type "unsigned char *"

Manche Compiler (namentlich der TI c2000) erlauben dies in der Tat 
nicht. Bei diesen sind "unsigned char*" und "volatile unsigned char*" 
defakto unterschiedliche Typen. Evtl. kann man dies über 
Compiler-Optionen beeinflussen, hab ich jedoch nie versucht.

> extern void udp(unsigned int len, unsigned char *buff);

> udp = (struct UDP_Header *)&buff[34];

Wie soll das denn zusammenpassen ?

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, würde sagen der Compiler mag wohl nicht, dass der Name der Funktion 
dem eines Parameters entspricht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tatsächlich.
Der gcc mäkelt auch rum

genau hinschauen, dann sieht man es

  struct IP_header *ip;

  ip = (struct IP_Header *)&buff[24];


Achte auf die Schreibweise von "Header".
Einmal großes H, einmal kleines h

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sieht mir nach nem stark zusammengefrickelten Programm aus ;-)

Autor: Claudio Hediger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
klaus schrieb:
>> extern void udp(unsigned int len, unsigned char *buff);
>
>> udp = (struct UDP_Header *)&buff[34];
>
> Wie soll das denn zusammenpassen ?

Das habe ich mich auch gefragt... Ich habe den code
Einfach übernommen...

Ich werde die grosskleinschreibung anpassen und wieder berichten :) 
vielen dank

Autor: Claudio Hediger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So...

Ich habe nun die Schreibfehler ausgebessert... Doch leider mekkert er 
dann noch über ein paar andere Dinge.. Zudem hat er erst jetzt gemeldet, 
das mein Mikrocontroller zu wenig Speicher hat für diese Aufgabe... :(

Es gibt ja die möglichkeit, mit dem Launchpad auch andere 
Mikrocontroller von TI also MSP's zu programmieren

(siehe hier: 
http://hackaday.com/2010/09/28/launchpad-not-limit...)

Habe ich das richtig verstanden, das der Controller dazu das Spy-Bi Wire 
haben muss?


Kennt vielleicht jemand einen sehr kleinen Source Code für eine Simple 
UDP anfrage an den ENC28J60?

Danke schonmal

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.