- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 10

Thema: Fehlersuche

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Fehlersuche

    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.
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Welcher Fehler kommt? Wenn man das weiß kann man etwas besser helfen.

    MfG Hannes

  3. #3
    Ich habe mal ein Screenie angehängt. Hoffe, er hilft weiter.

    Danke für das Interesse an der Frage!
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken fehlerpic.jpg  

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Außer zwei berechtigten Warnungen kann ich das fehlerfrei übersetzen:
    Code:
    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
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Nein, leider sind weiter oben schon alle Variablen definiert, von daher alles OK. Weitere Ideen? =(

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    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

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Datei gespeichert, vor dem Übersetzen?

  8. #8
    Habe bereits alles gemacht was ihr gesagt habt. Leider tritt immer noch dieselbe fehlermeldung auf... gehts bei euch denn?

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    "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:
    Code:
    #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;
    }
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Habe auch keine ahnung was dar schief ist. Kattauer, welcher WinAVR version brauchst du? Vielleicht ist das ein alter bug in dem compiler.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests