PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehlersuche



kattauer
28.02.2010, 15:44
Wo steckt der Fehler?

Wenn ich das "make" Tool ausführe kommen immer drei Fehler, egal was ich wegkürze... Die For-Schleife scheint nicht io zu sein.

021aet04
28.02.2010, 16:36
Welcher Fehler kommt? Wenn man das weiß kann man etwas besser helfen.

MfG Hannes

kattauer
28.02.2010, 18:27
Ich habe mal ein Screenie angehängt. Hoffe, er hilft weiter.

Danke für das Interesse an der Frage!

radbruch
28.02.2010, 18:56
Hallo

Außer zwei berechtigten Warnungen kann ich das fehlerfrei übersetzen:

avr-gcc -mmcu=atmega8 -Os -mno-interrupts -funsigned-char -funsigned-bitfields -Wall -Wstrict-prototypes -ggdb -c -DF_CPU=8000000UL -Wa,-acdhlmns=temp.lst temp.c -o temp.o
temp.c: In function `main':
temp.c:7: warning: 'h' might be used uninitialized in this function
temp.c:7: warning: 'd' might be used uninitialized in this function


Zeile 21 ist tatsächlich der for-Befehl:
for(i=0;i<4;i++){

Da fällt mir eigentlich auch kein Fehler auf. Wenn man allerdings nur die Zeilen mit Programmcode zählt, dann kommt man auf diesen if-Befehl:
if(uebergaenge==66){

"lefthand" wäre dann uebergänge, und da d und h beim Programmstart nicht definiert sind, könnte der Kompiler vielleicht der Meinung sein, dies hier wird nicht richtig ausgeführt:
if(dataO[1]<300){d=1;}
if(dataO[1]>600){h=1;}
if(h==1 && d==1){uebergaenge++;

und bei data[1] zwischen 300 und 600 hätte er damit auch vollkommen recht. Deshalb würde ich das Progamm mal so ändern:

int i, h=0, d=0;

Das ist aber nur geraten und nix gewußt.

Gruß

mic

kattauer
28.02.2010, 19:07
Nein, leider sind weiter oben schon alle Variablen definiert, von daher alles OK. Weitere Ideen? =(

021aet04
28.02.2010, 19:10
Nein, leider sind weiter oben schon alle Variablen definiert, von daher alles OK. Weitere Ideen? =(


Das stimmt schon, aber gib den Variablen definierte Werte (z.B. 0)

MfG Hannes

m.a.r.v.i.n
28.02.2010, 20:36
Datei gespeichert, vor dem Übersetzen?

kattauer
28.02.2010, 23:26
Habe bereits alles gemacht was ihr gesagt habt. Leider tritt immer noch dieselbe fehlermeldung auf... gehts bei euch denn?

radbruch
28.02.2010, 23:44
"Außer zwei berechtigten Warnungen kann ich das fehlerfrei übersetzen"

Ja, bei mir geht's (das Kompilieren), auch wenn es keine Beine hat. Der Ansatz, jeweils abzuwarten, bis je einmal high und einmal low erreicht wurde, erscheint mir übrigends auch richtig:

#include "asuro.h"

int main(void)
{
Init();
int i,h=0,d=0;
unsigned int dataO[2];
int umdrehungen=0, uebergaenge=0;
char dataSR[3];
SerRead(dataSR,3,0);
SerWrite("geht klar!\n",11);
// Viereck
for(i=0;i<4;i++)
{
// gradeaus
while(umdrehungen<3)
{
MotorDir(FWD,FWD);
MotorSpeed(120,125);
OdometrieData(dataO);
if(dataO[1]<300){d=1;}
if(dataO[1]>600){h=1;}
if(h==1 && d==1)
{
uebergaenge++;
h=0;
d=0;
}
if(uebergaenge==66)
{
umdrehungen++;
uebergaenge=0;
}
}
}
while(1);
return 0;
}

Valen
01.03.2010, 18:45
Habe auch keine ahnung was dar schief ist. Kattauer, welcher WinAVR version brauchst du? Vielleicht ist das ein alter bug in dem compiler.