- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Wo liegt der Fehler?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80

    Wo liegt der Fehler?

    Anzeige

    E-Bike
    Hallo! Ich habe den Asuro zu meinem Geburtstag gestern bekommen. Alles Funktioniert.
    Nun versuche ich schon ein eigenes Programm für den Asuro zu schreiben, das so aussieht:
    Code:
    #include "asuro.h"
    
    int main(void){
    	Init()
    	MotorDir(FWD,FWD);
    	MotorSpeed(120,120);
    	StatusLED(GREEN);
    	while(PollSwitch()==0){
    		SerWrite("Alles OK!\n",10);
    	}
    	MotorSpeed(0,0);
    	StatusLED(RED);
    	while(1){
    		SerWrite("Aua!\n",5);
    	}
    }
    Nun habe ich das Problem mit dem Make. Ich speichere den Quellcode unter der Datei test.c und klicke auf "make". Dann schmeisst er mir jedoch folgendes raus:

    C:\ASURO_src\FirstTry>make all
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
    | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
    [ -s test.d ] || rm -f test.d
    -------- begin --------
    avr-gcc --version
    avr-gcc (GCC) 3.3.1
    Copyright (C) 2003 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.

    avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
    test.c: In function `main':
    test.c:5: error: parse error before "MotorDir"
    MAKE.EXE: *** [test.o] Error 1


    > Process Exit Code: 0

    Wo liegt jetzt der Fehler im Quellcode? Ich habe vor "MotorDir" keinen entdecken können. Für Profis mag das wohl kein Problem darstellen aber ich bin ein völliger Neueinsteiger in das Gebiet Robotik und C-Programmierung. Vielen Dank schonmal im Voraus für eure Hilfe, damit ich endlich weiter machen kann mit dem selber Programme schreiben.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Wenn das dein Code ist, fehlt das Semikolon beim init()
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80
    Achso! Wenn ich das Semikolon hinmache, funktionierts. Aber im Handbuch zu Asuro steht kein Semikolon bei dem Beispiel... komisch

    Aber ich habe noch eine Frage:
    Wie kann ich mit SerWrite() Variablen ausgeben? Es soll sowas ähnliches wie das hier sein:
    SerWrite("Umdrehungen gesamt: (Variable a) [Links] (Veriable b) [Rechts] ",100);

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Semikolonas ist C-Standard allgemein.

    SerWrite :
    Da kommt's auf deine C-Library an.
    Normalerweise wär das sowas wie "printf()".
    Da würde das aussehen (z.B)

    printf("Umdr.gesamtVariable %d)...(Variable %d)\n", a, b);

    Type "Help" for help
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80
    Joa, danke! Ich werd's mal damit versuchen. Ich habe nämlich in der Programmiersprache C fast keine Ahnung.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80
    Ne, klappt leider nicht. Da ich dann am Ende noch mehr Angaben als nötig habe, sagt er mir, dass da zu viel dran ist. Geht das nicht noch irgendwie anders?

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Kollege, jetzt brauchen wir den aktuellen code und die Fehlermeldungen. "Irgendwie anders" geht's fast immer
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    08.05.2005
    Ort
    München
    Alter
    52
    Beiträge
    59
    Hi,

    ich mach das so:
    char string1[255];
    snprintf(string1,255,"+++| %4d | %4d | %4d | %4d | %4d | %4d |---\r\n",pos[ODLEFT],pos[ODRIGHT],pos[IRLEFT],pos[IRRIGHT],pos[ADCSWITCH],pos[ADCBATT]);
    SerWrite(string1,strlen(string1));

    Oben mußt du noch
    #include <stdio.h>
    #include <string.h>
    angeben.

    snprintf ist so etwas wie printf, schreibt den String nur in eine Variable.
    Und dass kannst du dann über SerWrite ausgeben.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    18.03.2005
    Ort
    Mecklenburg Vorpommern / Hamburg
    Alter
    35
    Beiträge
    80
    Hallo! Danke erstmal für deine schnelle Antwort.
    Wie ich schon gesagt habe, bin ich ein C-Neueinsteiger.
    Ich habe noch einige Frage:
    1. Was hat %4d für eine Bedeutung
    2. Was hat pos[...] für eine Bedeutung
    3. Muss man noch irgendwas bei den Variablen ODLEFT, ODRIGHT, IRLEFT, IRRIGHT usw. vorher festlegen oder so?
    4. Was soll das ADCSWITCH und ADCBATT?

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    08.05.2005
    Ort
    München
    Alter
    52
    Beiträge
    59
    Hi,

    sorry, ich habe einfach eine Zeile aus meinem Code kopiert, ohne grösser darüber nachzudenken.

    snprintf hat ungefähr die gleiche funktion wie printf. Verwendet also auch die selben Formatcodes.
    %d bedeutet eine Integer Variable
    %4d bedeutet eine Integer Variable, für die 4 Zeichen reserviert werden.

    das mit dem Pos usw. ist einfach aus meinem Code und sollte eigenlich nur demontrieren, wo man die Variablen dann angibt.

    Vielleicht zur Verdeutlichung ein paar Beispiele:
    snprintf(string,10,"Hallo Welt!!!!\r\n"); -> string enthält dann "Hallo Welt" Da String max. 10 Zeichen Aufnehmen darf.

    snprintf(string, 40,"Wert 1: %d",variable1); -> string enthält dann "Wert 1: 100", wenn die variable1 den Wert 100 enthält.

    snprintf(string,40,"Wert 1: %4d, Wert 2: %4d",variable1,variable2); -> string enthält dann "Wert 1: 1, Wert 2: 1234" wenn die variable 1 den Wert 1 und variable2 den Wert 1234 enthält.

    Kurzes Google nach 'printf format codes' hat z.B. folgende Seite ergeben:
    http://www.ee.surrey.ac.uk/Personal/.../C/printf.html

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