PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehlermeldung durch SIGNAL-deklarierung in asuro.c



upaucc
06.08.2007, 12:00
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:

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;
}}

damaltor
06.08.2007, 13:03
prüfe mal die beiden zeilenangaben aus der fehlermeldung. scheinbar ist hier was doppelt definiert.

SprinterSB
06.08.2007, 13:20
Es muss immer SIGNAL heissen und nicht SIGNAL1 oder so.

upaucc
06.08.2007, 13:21
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!

upaucc
06.08.2007, 13:24
@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.

damaltor
06.08.2007, 17:03
sag mal... hast du die version 2.6.1? da war was mit den signals.

was steht in deiner asuro.c in zeile 216? und was in zeile 184?

upaucc
07.08.2007, 09:49
Hi,
in zeile 184 kommt diese deklaration:


SIGNAL (SIG_OVERFLOW2)
{
TCNT2 += 0x25;
count36kHz ++;
if (!count36kHz) timebase ++;
}

in zeile 216 diese:


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;
}}

damaltor
07.08.2007, 10:52
schlecht...
=)
er meint, es währen doppelte funktionsdeklarationen vorhanden, weil zweimal SIGNAL dasteht. was man dagegen jketzt spontan tun kann, weiss ich leider auch nicht... :/

upaucc
07.08.2007, 11:10
ja ;)
ich wunder mich nur, weil programme schon mit genau der asuro.c gelaufen sind. kann das evtl. an nem update von winavr liegen?
habe jetzt gerade die original version von der asuro cd drauf.

uwegw
07.08.2007, 11:18
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.

upaucc
07.08.2007, 11:28
interrupt.h ist eingebunden:

#include <avr/interrupt.h>
von der signal.h ist nichts da.
wie binde ich das ein?

uwegw
07.08.2007, 11:39
Die signal.h ist bei nem aktuellen winavr nicht mehr nötig. Ansonsten
#include <avr/signal.h>

upaucc
07.08.2007, 11:53
super!
damit hats geplappt!
vielen dank an alle!