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.