prüfe mal die beiden zeilenangaben aus der fehlermeldung. scheinbar ist hier was doppelt definiert.
Hi Leute,
folgendes Problem:
Ich habe auf meinen asuro schon längere zeit nichts mehr aufgespielt. mittlerweile hab ich auch einen neuen PC bekommen, jetzt hab ich winAVR auf den neuen PC gemacht, die alte asuro.c auf den rechner etc.
wenn ich jetzt ein programm schreibe kommt bei aufrufen des make-files folgender fehler:
wenn ich zwei der signal deklarierungen ausklammere dann geht das umwandeln mit dem make-file, aber das programm läuft auf asuro nicht.
asuro.c:216: error: redefinition of `SIGNAL'
asuro.c:184: error: `SIGNAL' previously defined here
make: *** [asuro.o] Error 1
meine asuro.c ist eine erweiterte version aus dem inetz.
auf dem alten rechner lief das einwandfrei.
hat jemand einen rat??
sie SIGNAL deklarierungen in asuro.c sehen so aus:
Code:SIGNAL (SIG_OVERFLOW2) { TCNT2 += 0x25; count36kHz ++; if (!count36kHz) timebase ++; } SIGNAL (SIG_INTERRUPT1) { MotorDir(BREAK,BREAK); StatusLED(RED); MotorSpeed(0,0); Msleep(500); StatusLED(GREEN); } SIGNAL (SIG_ADC) { static unsigned char tmp[2],flag[2],toggle=FALSE; if (autoencode){ tmp[toggle]= ADCH; if (toggle) ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_RIGHT; else ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_LEFT; if ( (tmp[toggle] < 140) && (flag[toggle] == TRUE)) { encoder[toggle] ++; flag[toggle] = FALSE; } if ( (tmp[toggle] > 160) && (flag[toggle] == FALSE)) { encoder[toggle] ++; flag[toggle] = TRUE; } toggle ^= 1; }}
Es muss immer SIGNAL heissen und nicht SIGNAL1 oder so.
Disclaimer: none. Sue me.
hi!
ja, die fehlermeldung ist ja genau dass SIGNAL schonmal definiert wurde, ich habe bloß nichts an der syntax geändert. es lief schonmal alles mit der asuro.c, nur jetzt auf einmal geht nichts mehr!
@sprinter
sorry mein fehler, hatte das nur mal ausprobiert weil eben die meldung kam, dass SIGNAL schon definiert war. die fehlermeldung ist eben aus dem kontext ohne signal1 etc.
Hi,
in zeile 184 kommt diese deklaration:
in zeile 216 diese:Code:SIGNAL (SIG_OVERFLOW2) { TCNT2 += 0x25; count36kHz ++; if (!count36kHz) timebase ++; }
Code:SIGNAL (SIG_ADC) { static unsigned char tmp[2],flag[2],toggle=FALSE; if (autoencode){ tmp[toggle]= ADCH; if (toggle) ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_RIGHT; else ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_LEFT; if ( (tmp[toggle] < 140) && (flag[toggle] == TRUE)) { encoder[toggle] ++; flag[toggle] = FALSE; } if ( (tmp[toggle] > 160) && (flag[toggle] == FALSE)) { encoder[toggle] ++; flag[toggle] = TRUE; } toggle ^= 1; }}
Ist die signal.h und interrupt.h eingebunden? Das müsste aber eigentlich automatisch in der asuro.h erfolgen.
Die SIGNAL-Schreibweise für die Interrupts ist zwar schon ewig veraltet, wird aber immer noch unterstützt.
Lesezeichen