PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WIN AVR warning



frank1210
15.01.2010, 11:47
Ich habe mir die neueste WIN AVR installiert, und beim 1. compillieren erschein dieser Warnhinweis
from test.c:1:
c:/winavr-20090313/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
Ich hab mir zwar auch die LIB 2.72. runtergeladen, aber die sagt mir WIN AVR nicht vorhanden. Alles etwas verwirrend.
Hat jemand ne Idee?
Beim 2.compillieren erscheint dan die Meldung nicht mehr

Hubert.G
15.01.2010, 12:30
Das ist ein Hinweis auf einen Änderung des GCC in Bezug auf die ISR-Aufrufe. Siehe:
file:///C:/WinAVR-20090313/doc/avr-libc/avr-libc-user-manual/group__avr__interrupts.html

Valen
15.01.2010, 18:03
Das ist ein Hinweis auf einen Änderung des GCC in Bezug auf die ISR-Aufrufe. Siehe:
file:///C:/WinAVR-20090313/doc/avr-libc/avr-libc-user-manual/group__avr__interrupts.htmlLeider hast du ein link gemacht zu einer datei auf deine festplatte. Nur die das auch dort gespeichert haben werden es finden. Das pfad in dem link ist:

C:/WinAVR-20090313/doc/avr-libc/avr-libc-user-manual/group__avr__interrupts.html

Besserwessi
15.01.2010, 19:03
Der Link sollte wenigstens bei fank1210 passen, ist ja teil des WINAVR Paketes.

Das Problem ist eine Änderung wie Interrupts eingebunden werden. Das Programm ist wohl noch für eine ältere Compilerversion (Gcc 3.xx). Man sollte also eventuell das Programm anpassen.

thewulf00
15.01.2010, 19:30
Wenn man zweimal kompiliert, verschwinden die Warnings immer alle. Das ist ein Feature, damit man bei vielen Warnings die Fehler filtern kann.

oberallgeier
15.01.2010, 19:35
... ein Feature, damit man bei vielen Warnings die Fehler filtern kann.Irgendwie hatte ich mich bisher immer wieder gefragt, warum das so sei. Danke!

Jaecko
15.01.2010, 20:02
hm... Aber ist das nicht irgendwie der "falsche" Ansatz, dass man erst die Fehler beseitigt, dann die Warnungen?

thewulf00
15.01.2010, 20:08
Sicher kann man das diskutieren. Aber ich weiß, dass IMMER beim 2. Kompilieren die Warnings verschwinden - und zwar nicht nur durch die Probleme, die der OP hat.

frank1210
16.01.2010, 13:48
OK, und was kann ich jetzt wo einstellen, oder ist der Warnhinweis zu ignorieren?

thewulf00
16.01.2010, 14:19
Nicht ignorieren. Einfach nicht mehr die signal.h einbinden, sondern die interrupt.h.

frank1210
16.01.2010, 14:32
Ja und wie, im asuro.h habe ich folgendes gefunden:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

thewulf00
16.01.2010, 16:48
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>

radbruch
16.01.2010, 17:13
#include <avr/interrupt.h>
//#include <avr/signal.h>
Das ist wohl die sauberste Lösung.


... ein Feature, damit man bei vielen Warnings die Fehler filtern kann.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.

Gruß

mic

thewulf00
16.01.2010, 18:14
Meinen Respekt, radbruch!
Ich kann das nichtmal bei meinen eigenen... :)

frank1210
16.01.2010, 18:17
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

Valen
16.01.2010, 19:15
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.

frank1210
16.01.2010, 19:32
Hier die Stelle mit den Fehlern. Ist außerdem aus dem Buch "SPASS MIT ASURO BAND ":

if (difference<-speed)difference=-speed;
if (difference>speed)difference=speed;
if (difference>0) MotorSpeed(speed,speed++);
else MotorSpeed(speed,speed--);






}

return 0;
}

radbruch
16.01.2010, 20:07
Wenn die IFs nicht zutreffen hat speed keinen definierten Wert. Etwas wie

unsigned char speed=100;

fehlt hier.

frank1210
16.01.2010, 20:21
ist denke ich mal doch alles vorhanden:

#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;
}

radbruch
16.01.2010, 20:44
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:


if (difference<-speed)difference=-speed;
if (difference>speed)difference=speed;
if (difference>0) MotorSpeed(speed,speed++);
else MotorSpeed(speed,speed--);


Wenn der Odozählerunterschied kleiner -speed dann Unterschied gleich -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

frank1210
16.01.2010, 20:56
so sieht das Original aus:

if (difference<-speed)difference=-speed;
if (difference>speed)difference=speed;
if (difference>0) MotorSpeed(speed-difference,speed);
else MotorSpeed(speed,speed+difference);
mit dem (++)bzw.(--)habe ich rumexperimentiert.
Gruß Frank

Valen
16.01.2010, 21:36
Stimmt es du arbeitest mit den code auf seite 18, kapitel 1.5.2 "Nur ein Stükchen geradeaus"?

Hmm, MotorSpeed erwartet "unsigned char", speed ist aber ein "signed int". Ein "--" operation auf speed wan es die wert 0 hat wird ein 'undefinierte' auswirkung geben. Deshalb die warnung denke ich.

Valen
16.01.2010, 21:42
Ein warnung ist auch nur ein warnung. Ein run-time fehler (fehler im betrieb) wird nicht unbedingt auftretten. De compiler macht dich aufmerksam auf ein potentieles problem das du besser mit weitere kontrollier-code vermeiden soll.