Ja und wie, im asuro.h habe ich folgendes gefunden:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
Druckbare Version
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.Zitat:
#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.Zitat:
... ein Feature, damit man bei vielen Warnings die Fehler filtern kann.
Gruß
mic
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.
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