www.mikrocontroller.net

Forum: GCC conflicting types brauche bitte dringend hilfe


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Rene U. (ulmi)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallöchen,

mein Ziel ist es mit einem Atmega8 einen Hex Wert (also zum bsp 4F) über 
den UART zu empfangen. Mit diesem Wert soll dann weitergearbeitet 
werden.

Mein Problem ist nun, dass bei der Übertragung von F ja der Ascii Wert 
übertragen wird (also 70). Jetzt hab ich mir überlegt, den Wert einfach 
umzuwandeln und mir die korrekte Zahl auszurechnen.

Leider gibt es bei dem Unterprogrammaufruf ein Problem.
Ich bekomme immer "conflicting types for 'ascii2int'".
Was habe ich falsch gemacht? Oder gibt es eine andere einfachere Lösung 
für mein Vorhaben?

Hier mein Code:
int main(void)
{
  
  init_uart();
  unsigned char Line[40];      
  unsigned char zwischen;
  unsigned int erg;
  
 
    while(1)
    {
      
    uart_puts("AT Z");
     _delay_ms(50);
     uart_puts("AT SP0");
     _delay_ms(50);
     uart_puts("01 05");
     _delay_ms(50);
     
     uart_gets( Line, sizeof( Line ) / sizeof( Line[0] ) );
   
     zwischen=Line[0];
     uart_puts(Line);
     
  if ((zwischen=='F')||(zwischen=='f') )
  {    
     uart_puts("Jaaaa");
  }
  else
  {
    uart_puts("hmmm");
  }
  
  erg= ascii2int(zwischen);
         
     
  if(erg==15)
  {
    uart_puts("juhuuuu"); 
  }
  
  else
  {
    uart_puts("hmmmmmmmmm8");
  }
     
    
    _delay_ms(2000); 
    }
}


/* #################################ascii 2 int###################################*/


unsigned int ascii2int (unsigned char ascii)
{
  unsigned int dez;
  
  
  switch (ascii)
  {
    
    case 'A':
      dez=10;
      break;
    case 'B':
      dez=11;
      break;
    case 'C':
      dez=12;
      break;
    case 'D':
      dez=13;
      break;
    case 'E':
      dez=14;
      break;
    case 'F':
      dez=15;
      break;
  }

  return dez;
}


Ihr werdet euch jetzt wahrscheinlich krumm lachen weil es so einfach 
ist, aber ich weiß echt nicht weiter.

mfg ulmi

Autor: Rolf Magnus (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Schreibe mal ein
unsigned int ascii2int (unsigned char ascii);

vor main(). An der Stelle kennt der Compiler nämlich die Funktion noch 
nicht und nimmt per default an, daß sie int als Parameter- und 
Rückgabetyp hat.
Übrigens: Warum benutzt du unsigned char statt char für Text?

Autor: Krapao (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Der Compiler sollte dir außerdem eine Warnung geben, dass dez bei der 
Funktion ascii2int nicht initialisiert ist: Falls ascii kein Zeichen aus 
ABCDEF ist, welchen Wert gibt die Funktion zurück?

Autor: Ben jamin (scarab)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
if( ascii>='0' && ascii<='9' )
{
    dec = ascii - '0';
}
else if( ascii>='A' && ascii<='F' )
{
    dec = ascii - 'A' + 10;
}
else if( ascii>='a' && ascii<='f' )
{
    dec = ascii - 'a' +10;
}
else
{
    dec = ERROR;
}

oder
dec = ERROR;
dec = (ascii>='0' && ascii<='9') ? (ascii - '0'     ) : dec;
dec = (ascii>='A' && ascii<='F') ? (ascii - 'A' + 10) : dec;
dec = (ascii>='a' && ascii<='a') ? (ascii - 'a' + 10) : dec;

error wäre dann ein define, z.B. 0xFF

wenn du keine kleinen Buchstaben akzeptieren willst dann reicht 
natürlich auch:
dec = (ascii>='0' && ascii<='9') ? (ascii - '0'     ) : ERROR;
dec = (ascii>='A' && ascii<='F') ? (ascii - 'A' + 10) : dec ;

wenn du dann noch die richtige Zahl haben willst bei "4F" musst du die 4 
natürlich noch mit 16 multiplizieren und dann zum F addieren. (oder 4x 
links  schieben) Bei mehr als 2 Ziffern macht sich natürlich ne schleife 
gut. ( while( return != ERROR ) ... )

EDIT: ich weiß übrigens das die Klammern in dem ?-Operator unnötig sind, 
die dienen nur der Übersichtlichkeit ;)

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net