Dann ist die Software für den Asuro mit einem älteren GCC getestet worden. Also entweder machst Du einen Downgrade, oder Du kommentierst die Zeile aus:
#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/signal.h>
Ja und wie, im asuro.h habe ich folgendes gefunden:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
Dann ist die Software für den Asuro mit einem älteren GCC getestet worden. Also entweder machst Du einen Downgrade, oder Du kommentierst die Zeile aus:
#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/signal.h>
Das ist wohl die sauberste Lösung.#include <avr/interrupt.h>
//#include <avr/signal.h>
Das wußte ich auch nicht. Aber das liegt wohl auch daran, dass ich teilweise komplett umgebaute Programme beim ersten Versuch schon fast fehler- und warnungsfrei übersetzen kann.... ein Feature, damit man bei vielen Warnings die Fehler filtern kann.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Meinen Respekt, radbruch!
Ich kann das nichtmal bei meinen eigenen...
Und noch was,die Funktion speed müsste doch im ASURO.H definiert sein.
Warum kommt dan dieser Warnhinweis:
test.c:102: warning: operation on 'speed' may be undefined
test.c:103: warning: operation on 'speed' may be undefined
Las deine code bitte sehen. Ohne das mussen wir auf unsere glasskugel verzichten. Und der fehlt manchmal.
Im asuro.h oder eben asuro.c gibts gar keinen variabele oder funktion 'speed'. Nur die funktion MotorSpeed.
Hier die Stelle mit den Fehlern. Ist außerdem aus dem Buch "SPASS MIT ASURO BAND ":
Code:if (difference<-speed)difference=-speed; if (difference>speed)difference=speed; if (difference>0) MotorSpeed(speed,speed++); else MotorSpeed(speed,speed--); } return 0; }
Wenn die IFs nicht zutreffen hat speed keinen definierten Wert. Etwas wie
unsigned char speed=100;
fehlt hier.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
ist denke ich mal doch alles vorhanden:
Code:#include "asuro.h" #define SCHWELLEL 582 #define SCHWELLER 549 #define ANPASSUNG 10 #define LOW 0 #define HIGH 1 int main (void){ unsigned int data[2]; unsigned long int count=0; signed int status[2]={0,0}; signed int difference=0; signed int speed=200; int i=0; Init(); while(1){ switch(count) { case 0: MotorDir(FWD,FWD);speed=200;break; case 249: MotorDir(BREAK,BREAK); for(i=0;i<282;i++){Sleep(255);} MotorDir(FWD,BREAK);speed=200;count=250;break; case 330: MotorDir(BREAK,BREAK); } OdometrieData(data); if ((status[0]==LOW)&&(data[0]>SCHWELLEL+ANPASSUNG)) { status[0]=HIGH; difference++; count++; } if ((status[0]==HIGH)&&(data[0]<SCHWELLEL-ANPASSUNG)) { status[0]=LOW; difference++; count++; } if ((status[1]==LOW)&&(data[1]>SCHWELLER+ANPASSUNG)) { status[1]=HIGH; difference--; } if ((status[1]==HIGH)&&(data[1]<SCHWELLER-ANPASSUNG)) { status[1]=LOW; difference--; } if (difference<-speed)difference=-speed; if (difference>speed)difference=speed; if (difference>0) MotorSpeed(speed,speed++); else MotorSpeed(speed,speed--); } return 0; }
Ist das der orginale Code aus dem Buch? Die Bildung von difference aus den Odometriedaten scheint mir ja noch plausibel, aber das hier ist doch fragwürdig:
Wenn der Odozählerunterschied kleiner -speed dann Unterschied gleich -speedCode:if (difference<-speed)difference=-speed; if (difference>speed)difference=speed; if (difference>0) MotorSpeed(speed,speed++); else MotorSpeed(speed,speed--);
Wenn der Odozählerunterschied größer speed dann Unterschied gleich speed
Das "undefiniert" bezieht sich übrigens auf das ++ (bzw. --) hier:
MotorSpeed(speed,speed++);
Warum das der Kompiler anmotzt ist mir auch unklar.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen