pete1612
12.10.2013, 16: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!
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!