mikrocontroller.net

Forum: Compiler & IDEs incompatibler typ warum ?


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich habe folgendes Problem. Ich übergebe eigentlich ein unsigned 
char Array, der Compiler sagt mir das es nicht so ist wieso?

  typedef struct
  {
    unsigned char eth_dst[6];
    unsigned char eth_src[6];
    unsigned char eth_type[2];
  }ETHHEAD;
  typedef struct
  {
    unsigned char arp_htyp[2];
    unsigned char arp_ptyp[2];
    unsigned char arp_len;
    unsigned char arp_plen;
    unsigned char arp_op[2];
    unsigned char arp_smac[6];
    unsigned char arp_sip[4];
    unsigned char arp_dmac[6];
    unsigned char arp_dip[4];
  }ARP_HEADER;
  typedef struct
  {
    ETHHEAD  ethhead;
    ARP_HEADER arphead;
  }ARPPACKET;


  ARPPACKET packet;
  uint8_t i;
  for(i=0;i<6;i++)
  {
    packet.ethhead.eth_dst[i] = arp_dmac[i];
    packet.ethhead.eth_src[i] = mymac[i];
  }
  packet.ethhead.eth_type[0] = 0x80;
  packet.ethhead.eth_type[1] = 0x60;
  packet.arphead.arp_htyp[0] = 0x00;
  packet.arphead.arp_htyp[1] = 0x01;
  for(i=0;i<2;i++)
    packet.arphead.arp_ptyp[i] = ptyp[i];  // Arp Typ
  packet.arphead.arp_len = 0x06;
  packet.arphead.arp_plen = 0x04;
  if(op[0] == 1 || op[0] == 2)
  {
    for(i=0;i<2;i++)
      packet.arphead.arp_op[i] = op[i];

  }
  else
  {
   return 255;
  }
  for(i=0;i<6;i++)
  {
    packet.arphead.arp_smac[i] = mymac[i];
    packet.arphead.arp_dmac[i] = arp_dmac[i];
  }
  IP mip = getmyIP();
  packet.arphead.arp_sip[0] =mip.a;
  packet.arphead.arp_sip[0] =mip.b;
  packet.arphead.arp_sip[0] =mip.c;
  packet.arphead.arp_sip[0] =mip.d;
  for(i=0;i<4;i++)
    packet.arphead.arp_dip[i] = arp_dip[i];
  enc_send_packet(sizeof(packet),packet);

Beim aufrufen der enc_send_packet( unsigned int len, unsigned char *buf 
) Funktion gibt mir der Compiler für das 2 Argument einen "incompatible 
type" Fehler. Jemand eine Idee ?

Vielen Danke im Vorraus
Alex

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschludigt,habe noch Quelltext vergessen zwischen den 
Typendefinitionen und dem erstellen des Packetes:

  unsigned char ptyp[2];
  ptyp[0]= 0x08;
  ptyp[1]= 0x06;

  unsigned char arp_dmac[6];
  arp_dmac[0]= 0xFF;
  arp_dmac[1]= 0xFF;
  arp_dmac[2]= 0xFF;
  arp_dmac[3]= 0xFF;
  arp_dmac[4]= 0xFF;
  arp_dmac[5]= 0xFF;

  unsigned char arp_dip[4];
  arp_dip[0]=169 ;
  arp_dip[1]=254 ;
  arp_dip[2]=10 ;
  arp_dip[3]=55;

  unsigned char op[2];
  op[0]=0x00;
  op[1]=0x01;

  unsigned char mymac[6];
        mymac[0]=0xFF;
        mymac[1]=0xFF;
        mymac[2]=0xFF;
        mymac[3]=0xFF;
        mymac[4]=0xFF;
        mymac[5]=0xFF;


Grüsse

Alex

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo bitte ist packet ein char array?!?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
packet ist ein Struct, die Funktion erwartet einen char Pointer.

Machs mit einem Cast:
>   enc_send_packet(sizeof(packet),(unsigned char*)packet);

EDIT:
Aber du solltest dir dann sicher sein, dass die Anordnung und 
Ausrichtung der Bytes im Struct passt. Und nichts irgendwie auf 16-Bit 
aligned wird....

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> packet ist ein Struct, die Funktion erwartet einen char Pointer.
>
> Machs mit einem Cast:
>>   enc_send_packet(sizeof(packet),(unsigned char*)packet);

'packet' ist damit aber immer noch kein Zeiger.
(unsigned char *)&packet

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke euch!
Mit dem (unsigned char *)&packet vom Philipp geht es

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.