PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler des Compilers? / LIB? oder sonst was.



raptor_79
12.01.2008, 20:41
hallo,
ich sitze hier mit meinem asuro. und dieser macht merkwürdige dinge.
in einem programm in dem nicht ein mal die reder von der front-led ist macht er diese an. ein anderes mal läuft nur ein motor an, oder das programm startet nur teile von sich selbst.
auch kommt es vor, daß er zwar anfährt, aber auf die taster nicht mehr reagiert. oder er fährt und reagiert auf taster, dann fährt er rückwarts wie gesünscht, und dann nie wieder nach vorne.

könnte es sein, daß ich einen bug im compiler habe?
ist da jemanden etwas bekannt?

problem:
ich verwende LINUX. und dazu die avr-compiler und tools.
also GCC

meldung des compilers:
avr-gcc --version
avr-gcc (GCC) 4.2.1


und das bekomme ich außerdem. kennt sich einer aus? was meckert er da eigentlich an???


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 tes
t.o
In file included from asuro.h:34,
from test.c:9: ---------------------- hier mecker er
/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/signal.h:36:2: warning: #warn
ing "This header file is obsolete. Use <avr/interrupt.h>."
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-
struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=asuro.lst asuro.c -o a
suro.o
In file included from asuro.h:34,
from asuro.c:29: ---------------------- ... und hier mecker er
/usr/lib/gcc/avr/4.2.1/../../../../avr/include/avr/signal.h:36:2: warning: #warn
ing "This header file is obsolete. Use <avr/interrupt.h>."
avr-gcc -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-str uct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.o test.o asuro.o - -output test.elf -Wl,-Map=test.map,--cref -lm
avr-objcopy -O ihex -R .eeprom test.elf test.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O ihex test.elf test.eep
avr-objcopy: there are no sections to be copied!
avr-objcopy: --change-section-lma .eeprom=0x00000000 nie benutzt
make: [test.eep] Fehler 1 (ignoriert)
avr-objdump -h -S test.elf > test.lss



für antworten bin ich sehr dankbar

damaltor
12.01.2008, 20:47
problem:
ich verwende LINUX. und dazu die avr-compiler und tools.
also GCC


das ist kein problem. geht bei mir auch.

die beiden warnings sind nicht so schlimm, sie weisen darauf hin das ein veraltetes, aber immer noch funktionierendes header-file included wurde.

bitte zeige uns deinen quelltext, dann können wir weiter sehen.

radbruch
12.01.2008, 21:02
Hallo

Ich habe meine asuro.h so geändert:

#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/signal.h>
#include <stdlib.h>
signal.h ist veraltet und sollte nicht verwendet werden.

Gruß

mic

raptor_79
13.01.2008, 03:18
ah! danke wegen der meldung erst mal.


quelltext? bitte sehr.

ich muß mal dazu sagen, daß ich mit asuro und C gerade erst angefangen habe. genauer gesagt. gestern.



#include "asuro.h"
int main(void){


Init();

//----- Auf "Null" setzen -------
MotorDir(FWD,FWD);
MotorSpeed(0,0);
BackLED(OFF,OFF);
StatusLED(OFF);

//------- Programmschleife --------
while (1){
if (PollSwitch()>0) {
MotorSpeed(0,0);
StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(90,90);
}

else {

//------ Kein Hindernis -------
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(120,120);


}
}
while (1);
return 0;

}


hoffe, daß ich da keinen sch*** gemacht habe.

außerdem hab ich dieses kleine "programm" genommen und alles mögliche damit versucht. mal so mal so... wurde aber nicht besser.


und danke für eure schnellen antworten!!!!
super!

radbruch
13.01.2008, 10:03
Hallo

Mit diesem Befehl

#include "asuro.h"

wird die Datei asuro.h in dein Programm eingebunden. In asuro.h wiederrum steht folgendes:

#include <avr/signal.h>

In signal.h befinden sich die C-Funktionen für die Interruptverarbeitung. Es gibt aber eine neuere Version "interrupt.h" die "signal.h" ersetzen soll. Darauf weist der Kompiler in seiner Meldung hin.

Noch zu deinem Programm: Jeder fängt mal an. PollSwich() liefert gelegentlich auch Werte >0 wenn keine Taste gedrückt ist. Vermutlich wird dein asuro am Schaltpunkt des Tasters vor und zurück zappeln ;)

Gruß

mic

damaltor
13.01.2008, 11:46
das kleine problem wird sein, dass folgendes passiert:

der asuro fährt gegen eine wand. der prozessor merkt das sofort und fährt rückwärts, bis die taster gerade wieder losgelassen wurden (er fährt also nur ein paar millimeter zucück). sowie die taster frei sind, will er wieder vorwärts fahren. und so geht es immer weiter, er steht also an der wand und zittert vor sich hin. du brauchst eine verzögerung, damit eri eine bewstimmte zeit lang rückwärts fährt.

raptor_79
13.01.2008, 13:04
ja, tut er, wenn das mal funktioniert.
soll er ja auch.
nur, DAS mancht er nicht immer. er macht eben oft dinge, die er NICHT machen soll, oder er macht gar nichts.
das mit dem vor/zurück ist eben nur die basis des programms, bzw, das was davon jetzt noch übrig ist, nach dem ich den ganzen anderen mist wie odometrie und so rausgeworfen habe. ich will jetzt im programm auch nur noch wissen, ob IRGEND ein taster gedrückt ist, und nicht welcher.

trotzdem kommt es vor., das er die frontLED anmacht, oder die BackLED nicht aus machen, oder nur der rechte/linke motor drecht, oder er dann nur noch zurück fährt.
das ist das problem.

aber danke für deine antwort!!

damaltor
13.01.2008, 14:29
das klingt aber eher wie ein wackelkontakt.... sieh mal nach ob der prozessor wirklich fest in seiner fassung drin ist, und ob keine kalten lötstellen exisitieren. probiere ein paar einfache programme aus, die nur testen sollen ob die frontled richtig reagiert.

raptor_79
13.01.2008, 14:37
ja, hab alles schon nachgesehen. und mit reiniger gabeschrubbt. (mach sowas auch beruflich). die hardware passt schon, sicher.
hat einer mal ein kleines programm, oder kann einer obigen code mal an seinem testen? oder besser mir mla ein hex-file schicken, daß er mit meinem code und seinem compiler erzeugt hat? würd gern mal vergleichen.

damaltor
13.01.2008, 14:59
Hier ist dein obiges programm, kompiliert mit avr-gcc 4.10 unter linux.

raptor_79
13.01.2008, 16:32
DANKE!!!

habs gleich mal getestet. geht!
aber, warum hat meins 41 pages und deins nur 24?
kann es was mit der code-optimierung zu tun haben? meine stehr auf "s".
war so, hab da nie was dran geändert. dachte das würde alles passen, was da so im make-file steht.

damaltor
15.01.2008, 00:20
ich habe es mit der alten originalen lib von der cd kompiliert.