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>
Werbung
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
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
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
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.
![]()
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
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen