- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Programm funktioniert nicht

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.04.2009
    Ort
    Wörgl
    Alter
    28
    Beiträge
    175

    Programm funktioniert nicht

    Anzeige

    E-Bike
    Hallo, Leute,
    ich hab folgendes Problem:

    Ich bin Anfänger was Roboter und programmieren betrifft und habe mir letzte Woche einen RP6 gekauft. Nun hab ich ein erstes Programm für den rp6 geschrieben und auch kompiliert:

    Code:
    #include "RP6RobotBaseLib.h"
    
    
    
     void Bumper(void)
    	
    	{
    	  if(bumper_left)
    	    
    		writeString("Linker Bumper gedrueckt!! \n");
           
           else
    	   
    	  if(bumper_right)
    	  
    	    writeString("Rechter Bumper gedrueckt!! \n");
    		
    	   else
    	   
    	  if(bumper_left && bumper_right)
    	  
    	    writeString("Beide Bumper gedrueckt!! \n");
    		
        }
    
    
    int main(void)
    
    
    { initRobotBase();
      powerON();
    
      writeString("Hallo! \n");
    
     
    
     while(true)
     
     Bumper;
    
    
     return 0;
    }
    Beim Kompiler kommt folgende Ausgabe:

    Code:
    -------- begin --------
    avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
    Copyright (C) 2006 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    Size before:
    AVR Memory Usage
    ----------------
    Device: atmega32
    
    Program:    6288 bytes (19.2% Full)
    (.text + .data + .bootloader)
    
    Data:        215 bytes (10.5% Full)
    (.data + .bss + .noinit)
    
    
    
    
    Compiling: RP6Base_LEDs.c
    avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=RP6Base_LEDs.lst -I../../RP6lib -I../../RP6lib/RP6base -I../../RP6lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6Base_LEDs.o.d RP6Base_LEDs.c -o RP6Base_LEDs.o
    RP6Base_LEDs.c: In function 'main':
    RP6Base_LEDs.c:39: warning: statement with no effect
    
    Linking: RP6Base_LEDs.elf
    avr-gcc -mmcu=atmega32 -I. -gdwarf-2   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=RP6Base_LEDs.o -I../../RP6lib -I../../RP6lib/RP6base -I../../RP6lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6Base_LEDs.elf.d RP6Base_LEDs.o ../../RP6lib/RP6base/RP6RobotBaseLib.o ../../RP6lib/RP6common/RP6uart.o --output RP6Base_LEDs.elf -Wl,-Map=RP6Base_LEDs.map,--cref    -lm
    
    Creating load file for Flash: RP6Base_LEDs.hex
    avr-objcopy -O ihex -R .eeprom RP6Base_LEDs.elf RP6Base_LEDs.hex
    
    Creating Extended Listing: RP6Base_LEDs.lss
    avr-objdump -h -S RP6Base_LEDs.elf > RP6Base_LEDs.lss
    
    Creating Symbol Table: RP6Base_LEDs.sym
    avr-nm -n RP6Base_LEDs.elf > RP6Base_LEDs.sym
    
    Size after:
    AVR Memory Usage
    ----------------
    Device: atmega32
    
    Program:    6290 bytes (19.2% Full)
    (.text + .data + .bootloader)
    
    Data:        215 bytes (10.5% Full)
    (.data + .bss + .noinit)
    
    
    
    -------- end --------
    
    
    > Process Exit Code: 0
    > Time Taken: 00:01
    Die Übersetzung läuft also fehlerfrei ab.

    Allerdings: Der Roboter hält sich nicht ganz daran. Er erzeugt nur die Ausgabe "Hallo!" und wenn ich auf den Bumpern herumdrücke, geschieht nichts. Aber warum?
    Kann mir jemand weiterhelfen?

    Mfg
    Michi

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Du musst noch in deiner Schleife
    Code:
    void task_Bumpers(void)
    aufrufen, wenn du die Variablen nutzen möchtest.

    Wenn du erst auf beide Bumper überprüfst und dann die einzelnen wird er dir auch anzeigen wenn beide gedrückt sind.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    ...Die Übersetzung läuft also fehlerfrei ab.....

    Junge, die Übersetzung hat nichts mit der Funktionsfähigkeit der Hardware zu tun.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    Hallo Michi,

    in deinem Code steht
    Code:
     while(true)
     Bumper;
    Richtig müsste es aber
    Code:
     while(true)
     Bumper();
    heißen (Klammern nach 'Bumper'), da der Funktionsname ohne Klammern die Adresse der Funktion ist und kein Aufruf.

    MfG mark

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.04.2009
    Ort
    Wörgl
    Alter
    28
    Beiträge
    175
    Hallo,

    Mein Quelltext sieht nun so aus:

    Code:
    #include "RP6RobotBaseLib.h"
    
    
    
     void Bumper(void)
    	
    	{
    	  if(bumper_left)
    	    
    		writeString("Linker Bumper gedrueckt!! \n");
           
           else
    	   
    	  if(bumper_right)
    	  
    	    writeString("Rechter Bumper gedrueckt!! \n");
    		
    	   else
    	   
    	  if(bumper_left && bumper_right)
    	  
    	    writeString("Beide Bumper gedrueckt!! \n");
    		
        }
    
    void task_bumpers(void)
    
    {}
    
    int main(void)
    
    
    { initRobotBase();
      powerON();
    
      writeString("Hallo! \n");
    
     
    
     while(true)
     
     { 
    
      void task_bumpers(void) {}
    
          
     Bumper();
     
    
     }
    
     return 0;
    }
    , aber es funktioniert immer noch nicht. Es passiert genau das selbe wie am Anfang.

    lg,
    Michi

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.04.2009
    Ort
    Wörgl
    Alter
    28
    Beiträge
    175
    Ich weiß, dass die Übersetzung nichts mit der Funktion der Bumper zu tun hat. Allerdings bin ich mir sicher, dass dies nicht an den Bumpern, sondern am Programm liegt.

    Gruß,
    Michi

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    Code:
    while(true)
     {
      void task_bumpers(void) {}
     Bumper();
     }
    Und Was soll das jetzt? Warum definierst Du task_bumpers mitten in der Main ein zweites Mal?

    Ich kenn mich zwar nicht mit der Lib des RP6 aus, aber sind bumper_left und bumper_right nicht auch Funktionen, die Aufgerufen werden müssen?

    MfG Mark

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.04.2009
    Ort
    Wörgl
    Alter
    28
    Beiträge
    175
    Und wie kann ich die Funktionen aufrufen?
    Ich habe jetzt die Definition von task_bumpers wieder weggelöscht (ich weiß nicht, was dieser Aufruf überhaupt bezwecken soll), aber es hat sich nichts geändert.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.04.2009
    Beiträge
    523
    Wie wäre es denn wenn du dir einfach mal die Doku zum RP6 durchliest? Da steht das doch gaaaaaanz genau beschrieben... Da kannst du dein Programm auch abschreiben, macht das selbe, nur das es klappt...

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    384
    Du sollst besser starten mit ein Forbild program wo schon die Bumber functionieren. Da siehts du dan auch das erst diese BUMPERstatechangedhandler aufgerufen wird. Nur wen diese handler lauft, konnen auch die variabelen bumper_LEFT und bumper_RIGHT genutzt werden.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test