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


von C. H. (hedie)


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
1
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
1
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
1
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
1
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
1
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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von C. H. (hedie)


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
1
struct UDP_header{
2
  unsigned int UDP_sourcePort;  
3
  unsigned int UDP_destPort;
4
  unsigned char UDP_lenght_h;
5
  unsigned char UDP_lenght_l;
6
  unsigned int UDP_checksum;
7
};
1
extern void udp(unsigned int len, unsigned char *buff);

von Karl H. (kbuchegg)


Lesenswert?

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

von C. H. (hedie)


Angehängte Dateien:

Lesenswert?

Hier alle Sourcen

Vielen Dank für deine Hilfe!

von Karl H. (kbuchegg)


Lesenswert?

Hmm.
Ich seh beim besten willen nicht, was der Compiler hier
1
/*Funktion um den IP Header zu erzeugen
2
####################################################################################*/
3
void ip(unsigned char *buff){
4
  struct IP_header *ip;
5
  unsigned int sum;
6
    unsigned char a = 0;
7
  
8
  ip = (struct IP_Header *)&buff[24];
9
    
10
  for(a=0;a<4; a++)
11
  {    
12
    ip->IP_destIp[a] = ip->IP_sourceIp[a];
13
    ip->IP_sourceIp[a] = myip[a];
14
  }
15
16
17
  ip->IP_checksum = 0x00; // checksum auf null setzen
18
  sum = checksum(&buff[14],0x00000000,20); // checksumme ausrechnen
19
  
20
  ip->IP_checksum = ((sum & 0xFF00) >> 8)|((sum & 0x00FF)<<8); 
21
}

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.

von C. H. (hedie)


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.

von Stefan E. (sternst)


Lesenswert?

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

von Udo S. (urschmitt)


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!

von klaus (Gast)


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 ?

von klaus (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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

von Simon K. (simon) Benutzerseite


Lesenswert?

Sieht mir nach nem stark zusammengefrickelten Programm aus ;-)

von Claudio Hediger (Gast)


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

von Claudio Hediger (Gast)


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-limited-to-value-line-chips/#more-28679)

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.