PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : uC/51 Probleme beim Übersetzen



pete1612
12.10.2013, 15:54
Hallo,

ich arbiete jetzt zum ersten Mal in µC/51, habe vorher immer viel mit CodeBlocks gearbeitet.
Nun habe ich eine einfache Funktion in meinem Programm, die angeblich falsch sein soll, aber ich kann leider keine Fehler finden.
Der Compiler ist so schlau, dass er mir nichteinmal sagt, welchen Fehler ich gemacht habe.
Als einziges bekomme ich gesagt, in welcher Zeile der Fehler stehen soll (Erste Anweisung in switch() ).
Vielleicht habe ich ja immer Fehler in der Programmierung gemacht, die CodeBlocks einfach toleriert hat - was ich mir nicht vorstellen kann.

Ich bitte Euch, einfach mal über den Code zu schauen, vielleicht habe ich ja doch einen Fehler.



//Sonderfunktion zur Generierung von Sequenztext fuer Steuerzeichen im Terminal

void cursor_pos_screen(unsigned char row, unsigned char column){ //Im Terminal Cursor positionieren
unsigned char def_seq[]="\x1b\x59\x00\x00\0"; //Offset-String
unsigned char x = 0;

unsigned char convert_dec_hex_byte(unsigned char byte, unsigned char low_high){ //Oberes Byte in HEX
unsigned char result = 0;

if(low_high){ //Oberen Bits
result = ((byte&0xF0)>>4);
result += 2; //32 Addieren -> ESC_OFFSET
}

if(!low_high){ //Unteren Bits
result = (byte&0x0F);
}

#define BASE_NUMBERS 48 //Basis von 0 in der ASCII
if(result < 10){ //Wenn HEX als Zahl dargestellt werden kann
result += BASE_NUMBERS;
}

#define BASE_LETTERS 97 //Basis von a in der ASCII
else{ //Sonst andere Basis
result += BASE_LETTERS;
}

return result;
}

#define ESC_ROW 10 //Offsetwert fuer oberes 1/2 Byte Reihenkoordinate
#define ESC_COL 14 //Offsetwert analog wie oben fuer die Spaltenkoordinate
#define HIGH 1
#define LOW 0

for(x=0;x<4;x++){ //Steuerzeichen nacheinander einlesen und uebertragen
switch(x){ //Nach x entscheiden, welcher Wert geaendert wird
case 0: //Reihe
def_seq[ESC_ROW] = convert_dec_hex_byte(row,1);
break;

case 1: //Reihe
def_seq[ESC_ROW+1] = convert_dec_hex_byte(row,0);
break;

case 2: //Spalte
def_seq[ESC_COL] = convert_dec_hex_byte(column,1);
break;

case 3: //Spalte
def_seq[ESC_COL+1] = convert_dec_hex_byte(column,0);
break;
}
}

write_to_rs232(&def_seq); //Fertige Sequenz ausgeben
}


Fehlermeldung in µC/51 ist dann:
test_1.c 74: Error: too many errors.

Wie schon erwähnt: Reihe 74 ist "case 0: //Reihe"

Vielen Dank im Voraus!

Peter(TOO)
14.10.2013, 03:45
Hallo,

Fehlermeldung in µC/51 ist dann:
test_1.c 74: Error: too many errors.

Da läuft der interne Fehlerspeicher des Compilers über.

Das hat also nichts mit der Fundstelle zu tun. Der Fehler ist weit vorher zu suchen, möglicherweise hast du eine "}" irgendwo vergessen.


MfG Peter(TOO)

Klebwax
14.10.2013, 11:58
Fehlermeldung in µC/51 ist dann:
test_1.c 74: Error: too many errors.

Ist das alles an Fehlermeldungen oder nur die letzte?

MfG Klebwax

pete1612
14.10.2013, 20:09
Hallo!
Danke für eure Hilfe :) der "Fehler" war, dass uC/51 keine Funktion in Funktionen definieren kann... Funktion raus, global erstellt. fertig....

Peter(TOO)
14.10.2013, 21:39
Hallo,

Danke für eure Hilfe :) der "Fehler" war, dass uC/51 keine Funktion in Funktionen definieren kann... Funktion raus, global erstellt. fertig....
Das war dann für den Compiler eine fehlende "}".

OK, dann weisst du nun, wie dieser Compiler auf so etwas reagieren kann.
In C gilt immer die Regel, dass der Fehler dort ist, wo er angezeigt wird oder irgendwo vorher.

MfG Peter(TOO)