Wenn das dein Code ist, fehlt das Semikolon beim init()
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:
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: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); } }
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.
Wenn das dein Code ist, fehlt das Semikolon beim init()
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
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);
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.
Joa, danke! Ich werd's mal damit versuchen. Ich habe nämlich in der Programmiersprache C fast keine Ahnung.
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?
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.
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.
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?
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
Lesezeichen