- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 30

Thema: fehler in einfachem fahrprogramm und ich finde ihn nicht :(

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    39
    Beiträge
    211

    fehler in einfachem fahrprogramm und ich finde ihn nicht :(

    Anzeige

    Powerstation Test
    In dem Programm stimmt noch was nicht, make all gibt mir folgendes aus:

    RP6Base_hinundher.c: In function 'Batt':
    RP6Base_hinundher.c:33: error: expected '(' before '{' token
    RP6Base_hinundher.c:80: warning: 'main' is normally a non-static function
    RP6Base_hinundher.c:92:3: warning: no newline at end of file
    RP6Base_hinundher.c:92: error: expected declaration or statement at end of input
    make: *** [RP6Base_hinundher.o] Fehler 1


    Code:
    // Cruise Behaviour:
    
    #include "RP6RobotBaseLib.h" 	
    
    #define IDLE  0
    
    #define TURN_SPEED 50
    #define MOVE_SPEED 100
    
    #define MOVE_FORWARDS 1
    
    
    
    void behaviour_cruise(void)
    
    {
    	uint8_t turn_direction = LEFT;
    	
    		{
    			setLEDs(0b100100); 
    		move(MOVE_SPEED, FWD, DIST_MM(2000), BLOCKING);
    
    		rotate(TURN_SPEED, turn_direction, 102, BLOCKING);
    
    		move(MOVE_SPEED, FWD, DIST_MM(100), BLOCKING);
    		rotate(TURN_SPEED, turn_direction, 102, BLOCKING);
    		move(MOVE_SPEED, FWD, DIST_MM(2000), BLOCKING);
    		
    		rotate(TURN_SPEED, RIGHT, 102, BLOCKING);			
    		move(MOVE_SPEED, FWD, DIST_MM(100), BLOCKING);
    		rotate(TURN_SPEED, RIGHT, 102, BLOCKING);
    
    	}
    	
    // akku_load:
    
    void Batt(void)
    {
    		setStopwatch1(400);
    
    	{
          while
          	{
          		startStopwatch1();
                if(getStopwatch1() > 300)
                {
    
                      writeString_P("\nADC Akku: Voll");
                      writeInteger(adcBat, DEC);
                      writeChar('\n');
                   if(adcBat  > 900)
    						{                   
                         setLEDs(0b001001);
                   		writeString_P("\nADC Akku: >9V");
                   	}	
                   else if(adcBat < 901 && adcBat > 800)
                   {
                   		writeString_P("\nADC Akku: >8V");
                         statusLEDs.LED4 = !statusLEDs.LED4;
                         statusLEDs.LED1 = !statusLEDs.LED1;
                         updateStatusLEDs();
                   }
                   
    					else if(adcBat < 801 && adcBat > 700)
    								{
      					     		setLEDs(0b000001);
      					     		writeString_P("\nADC Akku: >7V");
    								}
    					else if(adcBat < 701 && adcBat > 590)
    					{		
    							statusLEDs.LED1 = !statusLEDs.LED1;
    										updateStatusLEDs();
    										writeString_P("\nADC Akku: Leer");
                   } 		
    				else if(adcBat < 591 && adcBat > 500)
    					{		
    										writeString_P("\nADC Akku: Laden!");
    										powerOFF();
    					}
                   
                      setStopwatch1(0);
    				}
                
                
          }                
                 
    
    int main (void)
    
       {
    
    	initRobotBase(); 	
    
    	startStopwatch1();
    	powerON();
    	while(true) 
    
    		{
    
    		task_RP6System();
    		Batt();
    		behaviour_cruise();
    
    		}
    
    
    return 0;
    }

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2007
    Ort
    Kornwestheim (kWh)
    Beiträge
    1.118
    bei deinem ersten "while" fehlt ne schließende Klammer:
    Code:
                      setStopwatch1(0); 
                } 
             }    // das hat gefehlt!
                
          }
    und das "while" bräuchte wohl noch ne Bedingung
    Code:
     void Batt(void) 
    { 
          setStopwatch1(400); 
    
       { 
          while    // while WAS??? da fehlt ne Bedingung.
             { 
                startStopwatch1(); 
                if(getStopwatch1() > 300) 
                { ....

    nutze ein
    Code:
    void main(void)    // statt int main(void)
    das ist bei microcontrollern so, da die mit dem Hauptprogramm keinen (ERROR-) Wert zurückliefern (macht Windoof ja auch nicht, wenn es abstürtzt oder beendet wird, welches Programm sollte denn damit dann was machen, es läuft ja keins mehr...)


    Ach ja, das "return 0" könntest du dir auch sparen, da ja nix zurückgegeben wird, da es ne "void"-Funktion ist. (es sei denn, dein compiler mault dann. "make-all" => du nutzt WinAVR? dann kannste es, wie ich auch, weglassen)
    Gruß, AlKi

    Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
    ==> UMPROGRAMMIEREN!

    Kubuntu

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    39
    Beiträge
    211

    OK danke erstmal

    also zu
    while habe ich (true) gesetzt, die anderen korrekturen auch gemacht...
    da gibt mir der compiler das aus:

    RP6Base_hinundher.c: In function 'Batt':
    RP6Base_hinundher.c:81: warning: return type of 'main' is not 'int'
    RP6Base_hinundher.c:81: warning: 'main' is normally a non-static function
    RP6Base_hinundher.c: In function 'main':
    RP6Base_hinundher.c:93: warning: 'return' with a value, in function returning void
    RP6Base_hinundher.c: In function 'Batt':
    RP6Base_hinundher.c:94: error: expected declaration or statement at end of input
    RP6Base_hinundher.c:30: warning: unused variable 'ubat'
    make: *** [RP6Base_hinundher.o] Fehler 1

    compille unter linux ... funktioniert an sich auch .. bloß irgendwas ist in meinem prog nicht richtig und ich bin dem fehler noch nicht auf der schliche....

    Trotzdem danke erstmal!

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    06.01.2008
    Beiträge
    27
    auf den ersten blick find ich in der zeile 94 auch nix besonderes. ich zitiere:

    Code:
    startStopwatch1();
    die zeile hab ich mir von oben geholt: vielleicht ist es jetz ne andere.

    poste doch mal den aktuellen code!!

    gruß!

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    39
    Beiträge
    211
    hier ...
    Code:
    // Cruise Behaviour:
    
    #include "RP6RobotBaseLib.h" 	
    
    #define IDLE  0
    
    #define TURN_SPEED 50
    #define MOVE_SPEED 100
    
    #define MOVE_FORWARDS 1
    
    
    
    void behaviour_cruise(void)
    
    {
    	uint8_t turn_direction = LEFT;
    	
    		{
    			setLEDs(0b100100); 
    		move(MOVE_SPEED, FWD, DIST_MM(2000), BLOCKING);
    
    		rotate(TURN_SPEED, turn_direction, 102, BLOCKING);
    
    		move(MOVE_SPEED, FWD, DIST_MM(100), BLOCKING);
    		rotate(TURN_SPEED, turn_direction, 102, BLOCKING);
    		move(MOVE_SPEED, FWD, DIST_MM(2000), BLOCKING);
    		
    		rotate(TURN_SPEED, RIGHT, 102, BLOCKING);			
    		move(MOVE_SPEED, FWD, DIST_MM(100), BLOCKING);
    		rotate(TURN_SPEED, RIGHT, 102, BLOCKING);
    
    	}
    	
    // akku_load:
    
    void Batt(void)
    {
    	setStopwatch1(400);
    	uint16_t	ubat = adcBat;
    	
    	{
          while (true)
          	{
          		startStopwatch1();
                if(getStopwatch1() > 300)
                {
    
                      writeString_P("\nADC Akku: Voll");
                      writeInteger(adcBat, DEC);
                      writeChar('\n');
                   if(adcBat  > 900)
    						{                   
                         setLEDs(0b001001);
                   		writeString_P("\nADC Akku: >9V");
                   	}	
                   else if(adcBat < 901 && adcBat > 800)
                   {
                   		writeString_P("\nADC Akku: >8V");
                         statusLEDs.LED4 = !statusLEDs.LED4;
                         statusLEDs.LED1 = !statusLEDs.LED1;
                         updateStatusLEDs();
                   }
                   
    					else if(adcBat < 801 && adcBat > 700)
    								{
      					     		setLEDs(0b000001);
      					     		writeString_P("\nADC Akku: >7V");
    								}
    					else if(adcBat < 701 && adcBat > 590)
    					{		
    							statusLEDs.LED1 = !statusLEDs.LED1;
    										updateStatusLEDs();
    										writeString_P("\nADC Akku: Leer");
                   } 		
    				else if(adcBat < 591 && adcBat > 500)
    					{		
    										writeString_P("\nADC Akku: Laden!");
    										powerOFF();
    					}
                   
                      setStopwatch1(0);
    				}
                
               } 
          }                
                 
    
    int main (void)
    
       {
    
    	initRobotBase(); 	
    
    	startStopwatch1();
    	powerON();
    	while(true) 
    
    		{
    		task_ADC();
    
    		task_RP6System();
    		Batt();
    		behaviour_cruise();
    
    		}
    
    
    return 0;
    }

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    39
    Beiträge
    211
    6Base_hinundher.o.d RP6Base_hinundher.c -o RP6Base_hinundher.o
    RP6Base_hinundher.c: In function 'Batt':
    RP6Base_hinundher.c:81: warning: 'main' is normally a non-static function
    RP6Base_hinundher.c:94: error: expected declaration or statement at end of input
    RP6Base_hinundher.c:30: warning: unused variable 'ubat'
    make: *** [RP6Base_hinundher.o] Fehler 1

    das der errorr dazu!

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    05.01.2008
    Beiträge
    22
    ....compille unter linux ...

    kein wunder, unter linux-doof läuft nicht alles.

    bei windows bis du besser dran.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2007
    Ort
    Solingen
    Alter
    31
    Beiträge
    177
    Du hast bei "void behaviour_cruise(void)" eine Klammer zu wenig oder zu viel. Mach mal die zweite Klammer auf weg.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2007
    Ort
    Solingen
    Alter
    31
    Beiträge
    177
    purebasic... Das liegt aber nicht an LINUX ^^

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.12.2007
    Ort
    Berlin
    Alter
    39
    Beiträge
    211
    ne definitv nicht ander progs gehen für den RP6 ja auch ;(

    ok ich habe es ... also das mit de rklammer war nicht schlecht blenderkid ... bei void batt war auch eine zuviel ...
    da hhabe ich das

    uint16_t ubat = adcBat;

    {

    koplett weg genommen ... also kopileren kanner jetzt

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests