Forum: Compiler & IDEs Fehler beim compilieren mit gcc 4.2.1 den ich nicht verstehe


von Malte _. (malte) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,
ich weiß ich nicht mehr weiter, ich habe ein relativ fertiges Projekt, 
welches mit dem gcc 3.4.3 auch sehr gut läuft. Nur mit dem gcc 4.2.1 
läuft es nicht. Also habe ich versucht den Fehler immer weiter 
einzugrenzen indem ich das "drumherum" weggelassen habe, bis das Projekt 
herauskam welches im Anhang ist. Mit dem gcc 3.4.1 übersetzt lässt das 
Programm an Pin 2 des PORTD eine LED mit 2 Hz blinken und gibt per RS232 
(9600 Baud) eine Zeichenfolge aus. (Das Programm verwendet einen 
kooperativen Scheduler). Mit dem gcc 4.2.1 scheint das Programm 
teilweise ins Nirvana zu laufen. Ich habe versucht den Ablauf des 
Quellcodes im AVR Studio 3.x zu simulieren, zumindest Stack-Überläufe 
erkenne ich dort keine.

Das Verhalten der LED verändert sich beim gcc 4.2.1 wenn ich in der 
Datei clock.c
1
void waitms_sched(u08 delay) {
2
u32 waituntil = get_msecs();
3
//u08 t[7];
4
waituntil += delay;
5
//wordtostr(t, get_msecs(), 5, 0);
6
//t[5] = '\n';
7
//t[6] = '\0';
8
//rs232_print_atomic(t);
9
rs232_print_atomic("C\n");
10
while (waituntil > get_msecs()) {
11
  rs232_print_atomic("D\n");
12
  sched();
13
}
14
}
die auskommentierten Zeilen Einbaue, hingegen wird das Verhalten der LED 
beim gcc 3.4.3 dadurch nicht beeinflusst.

Es wäre wirklich schön, wenn hier jemand eine Idee hätte.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hast du was komplett compilierfähiges zum Nachgucken?

von Malte _. (malte) Benutzerseite


Lesenswert?

Ja, soweit ich weiß müsste der Anhang komplett kompilierbar sein.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Hmm, sorry, das Attachment hatte ich übersehen.

Aber ich fürchte, das wird nicht ohne live debuggen gehen, mit all
den Stackoperationen des Schedulers.  Die auskommentierten Teile
verändern auf jeden Fall das Stackverhalten.  Ich würde es wahrschein-
lich auf einen ATmega88 portieren und via debugWire debuggen, oder
gleich auf einen ATmega16 und JTAG nehmen.

Mir ist auch nicht so ganz klar, warum du den eigentlichen Scheduler
nicht lieber gleich komplett in Assembler gezimmert hast.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.