Forum: Compiler & IDEs conflicting types brauche bitte dringend hilfe


von Rene U. (ulmi)


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:
1
int main(void)
2
{
3
  
4
  init_uart();
5
  unsigned char Line[40];      
6
  unsigned char zwischen;
7
  unsigned int erg;
8
  
9
 
10
    while(1)
11
    {
12
      
13
    uart_puts("AT Z");
14
     _delay_ms(50);
15
     uart_puts("AT SP0");
16
     _delay_ms(50);
17
     uart_puts("01 05");
18
     _delay_ms(50);
19
     
20
     uart_gets( Line, sizeof( Line ) / sizeof( Line[0] ) );
21
   
22
     zwischen=Line[0];
23
     uart_puts(Line);
24
     
25
  if ((zwischen=='F')||(zwischen=='f') )
26
  {    
27
     uart_puts("Jaaaa");
28
  }
29
  else
30
  {
31
    uart_puts("hmmm");
32
  }
33
  
34
  erg= ascii2int(zwischen);
35
         
36
     
37
  if(erg==15)
38
  {
39
    uart_puts("juhuuuu"); 
40
  }
41
  
42
  else
43
  {
44
    uart_puts("hmmmmmmmmm8");
45
  }
46
     
47
    
48
    _delay_ms(2000); 
49
    }
50
}
51
52
53
/* #################################ascii 2 int###################################*/
54
55
56
unsigned int ascii2int (unsigned char ascii)
57
{
58
  unsigned int dez;
59
  
60
  
61
  switch (ascii)
62
  {
63
    
64
    case 'A':
65
      dez=10;
66
      break;
67
    case 'B':
68
      dez=11;
69
      break;
70
    case 'C':
71
      dez=12;
72
      break;
73
    case 'D':
74
      dez=13;
75
      break;
76
    case 'E':
77
      dez=14;
78
      break;
79
    case 'F':
80
      dez=15;
81
      break;
82
  }
83
84
  return dez;
85
}


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

mfg ulmi

von Rolf Magnus (Gast)


Lesenswert?

Schreibe mal ein
1
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?

von Krapao (Gast)


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?

von Ben j. (scarab)


Lesenswert?

1
if( ascii>='0' && ascii<='9' )
2
{
3
    dec = ascii - '0';
4
}
5
else if( ascii>='A' && ascii<='F' )
6
{
7
    dec = ascii - 'A' + 10;
8
}
9
else if( ascii>='a' && ascii<='f' )
10
{
11
    dec = ascii - 'a' +10;
12
}
13
else
14
{
15
    dec = ERROR;
16
}

oder
1
dec = ERROR;
2
dec = (ascii>='0' && ascii<='9') ? (ascii - '0'     ) : dec;
3
dec = (ascii>='A' && ascii<='F') ? (ascii - 'A' + 10) : dec;
4
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:
1
dec = (ascii>='0' && ascii<='9') ? (ascii - '0'     ) : ERROR;
2
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 ;)

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.