- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: Hilfe bei Programmierung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.01.2012
    Ort
    Hamburg
    Beiträge
    18
    Blog-Einträge
    2

    Hilfe bei Programmierung

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo miteinander,

    Hatte dieses schöne Programm geschrieben, doch leider gibt es bei Ausführung von make all eine Fehlermeldung. Könnte mir dabei jemnd helfen wäre echt super nett.

    Make all
    avr-gcc (WinAVR 20100110) 4.3.3
    Copyright (C) 2008 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.


    Compiling: FWDBWD.c
    avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=FWDBWD.lst -I../../RP6Lib -I../../RP6Lib/RP6base -I../../RP6Lib/RP6common -std=gnu99 -MD -MP -MF .dep/FWDBWD.o.d FWDBWD.c -o FWDBWD.o
    FWDBWD.c: In function 'main':
    FWDBWD.c:12: warning: implicit declaration of function 'Dist_MM'
    FWDBWD.c:12: error: expected ')' before ';' token
    FWDBWD.c:19: error: too few arguments to function 'move'
    FWDBWD.c:19: error: expected ';' before '}' token
    FWDBWD.c:19: error: expected declaration or statement at end of input
    FWDBWD.c:9: warning: unused variable 'distance'
    FWDBWD.c:8: warning: unused variable 'dir'
    make.exe: *** [FWDBWD.o] Error 1
    > Process Exit Code: 2#include "RP6RobotBaseLib.h"



    Programm

    int main(void)
    {
    initRobotBase();
    powerON();
    uint8_t dir;
    uint16_t distance;
    while(true)
    {
    move(30,FWD,Dist_MM(300);
    moveAtSpeed(0,0);

    move(30,BWD,Dist_MM(300);
    moveAtSpeed(0,0);
    }
    return 0;
    }[/B]

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Hallo Wenkstar,
    das Programm hat mal rein garnichts schönes...
    Zitat Zitat von wenckstar Beitrag anzeigen
    FWDBWD.c:12: error: expected ')' before ';' token
    expected heißt "erwartet", es fehlt wohl ein ) vor dem ;?
    Zitat Zitat von wenckstar Beitrag anzeigen
    move(30,FWD,Dist_MM(300);
    wieviel Klammern gehen da also auf und wie viele zu?
    Bei BWD genau so....

    moveAtSpeed(0,0);
    dürfte nach dem move Befehl auch wenig Sinn machen, vielleicht guckst du dir mal an was in der RP6RobotBaseLib.c
    zur Funktion "moveAtSpeed" und "move" steht... oder exerzierst erst mal alle Beispielprogramme und Libs durch.. incl. lesen und verstehen der Sources.

    Mal abgesehen davon, das "move" 4 Parameter hat wie in den Lib Sources zu sehen und nicht 3 wie in deinem Aufruf,
    FWDBWD.c:19: error: too few arguments to function 'move'
    begehst du noch einen logischen Fehler obwohl der Compiler dies schon anmeckert.

    Du möchtest das der Bot sich 300mm vorwärts bewegt und stehen bleibt, dann 300mm zurück fährt und stehen bleibt.
    Dazu schickst du einen verkorksten Move Befehl ab.. und dann ein moveAtSpeed(0,0); also quasi als "Stop" Befehl.

    Das ist wie wenn ich Dir sage, "gehe 10 Schritte" ... was machst du nach den 10 Schritten normalerweise? Stehenbleiben? Aha! Und dann wenn du stehst sag ich dann noch mal "stehen bleiben" oder wie?

    Genau das machst du da im Programm. Logisch falsch! Steht auch genau so im Source...

    * This function allows you to tell the robot to drive a specific distance
    * at a given speed and then stop.
    Ein extra Stop macht nur bei einer unbefristeten Bewegung wirklich Sinn z.B. an einem Hindernis... und dazu muss man auch erst mal die Interuptstruktur, blocking, Odometrieauswertungen usw. verstanden haben.
    Nebenbei - es gibt auch einen echten Stop Befehl... auch im Lib Source zu finden.

    Das sind Anfängerfehler aber nicht ohne Grund wird Anfängern auch dringenst empfohlen, sich die Beispiele genau anzugucken.
    Dieser Tip ist nicht nur als sinn- und zweckfreie "nice to do" Aufgabe gedacht.

    Der Compiler sagt dir ausserdem doch deutlich wo es klemmt... les das bitte auch und behebe es selbstständig. In dem kurzen Stück Programm stecken schon 4 syntaktische und 2 logische Fehler so wie 2 warnings wegen ungenutzter Vars und einem Denkfehler zum Ablauf, du achtest nicht auf die Compilermessages und schaust dir auch nicht die gut dokumentierten Funktionsköpfe in den Libs an. Es gehört schon etwas mehr Präzision zum programmieren. Schön ... ist was anders.

    Gruß Rolf
    Geändert von RolfD (10.04.2012 um 00:43 Uhr)
    Sind Sie auch ambivalent?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    11.01.2012
    Ort
    Hamburg
    Beiträge
    18
    Blog-Einträge
    2
    Vielen Dank für die Antwort,
    Ja stimmt das Prog hatte echt nicht schönes.
    das ist mir schon klar wo ich etwas finde. Ich muss es ja auch verstehen.
    Z.B. bei den Programm: Jetzt möchte ich gerne noch eine Distance fahren 300, dann stoppen, noch die Richtung ändern und wieder zurückfahren. das ganze soll er 30 mal machen.

    Später will ich noch einen von den 2 en Ports die frei sind beschalten.

    Wie und wo setze ich diese Dinge ein?

    void stop(void)
    {
    mleft_des_speed = 0;
    mright_des_speed = 0;
    left_i = 0;
    right_i = 0;
    motion_status.move_L = false;
    motion_status.move_R = false;
    motion_status_tmp = motion_status.byte;
    MOTIONCONTROL_stateChangedHandler();
    }

    void changeDirection(uint8_t dir)
    {
    drive_dir = dir;
    mleft_des_dir = (dir == BWD || dir == LEFT);
    mright_des_dir = (dir == BWD || dir == RIGHT);
    }
    DIST_MM(DISTANCE)


    #include "RP6RobotBaseLib.h"

    int main(void)
    {
    initRobotBase();

    powerON();

    moveAtSpeed(30,30);

    while(true)
    {

    task_motionControl();

    task_ADC();
    }
    return 0;
    }

    Danke
    Geändert von wenckstar (15.04.2012 um 11:28 Uhr)

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Ich empfehle dir nun schon zum zweiten mal, dir erst die Beispiele/Examples aus den Libs - insbesondere die Porgramme Example_05_Move_01 bis Example_05_Move_05 aus den RP6BASE_EXAMPLES durchzuarbeiten. Also lesen, verstehen, ausprobieren, verändern usw... Es macht einfach keinen Sinn, dir irgend was zu erklären wenn du die Grundlagen nicht verstanden hast.
    LG Rolf
    Sind Sie auch ambivalent?

Ähnliche Themen

  1. Hilfe bei Programmierung
    Von margrit im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 06.04.2011, 16:29
  2. Hilfe, 1. Programmierung
    Von Barracuda_cy im Forum Assembler-Programmierung
    Antworten: 10
    Letzter Beitrag: 18.05.2008, 18:34
  3. Hilfe bei Programmierung
    Von TG12Mrobo im Forum Robby RP6
    Antworten: 5
    Letzter Beitrag: 18.11.2007, 19:52
  4. Hilfe bei Programmierung
    Von patrik_backh im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 18.12.2006, 12:35
  5. Hilfe bei Isp Programmierung
    Von Proworx im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 05.06.2005, 07:18

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad