Und wenn du folgendes versuchst:
Code:void main() { while (1) { for (unsigned char i = 0 ; i < 10; i++); } }
Hallo,
während ich an einem Programm arbeitete, erschien beim Compilien ein seltsamer Fehler:
Ich habe das Programm auf das Minimum reduziert, beim dem der Fehler immer noch auftrat:Code:avr-gcc (WinAVR 20100110) 4.3.3 (...) avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test_bug.lst -save-temps test_bug.c -o test_bug.o test_bug.c: In function 'main': test_bug.c:15: internal compiler error: Illegal instruction Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://sourceforge.net/tracker/?atid=520074&group_id=68108&func=browse> for instructions. make: *** [test_bug.o] Error 1
In einer Endlosschleife wird eine for-Schleife abgearbeitet, die eigentlich nichts tut. Anscheinend ist die Zeile i < 10 entscheidend: Wenn ich die weglasse, funktioniert es. Der Fehler tritt aber bei jeglicher Art von Vergleichen auf, auch (0==0) funktioniert nicht.Code:int main(void) { while (1) { unsigned char i; for (i = 0 ;i < 10; i++) { } } return 0; }
Der Fehler hat etwas mit der Optimierung zu tun: Wenn ich sie auf 0 stelle, klappt es. Bei allen anderen (1,2,3,s) tritt der Fehler auf.
Der Bugreport ist eingestellt, da kann man nichts mehr melden. Erstaunlicherweise funktionierte das Programm davor problemlos, mir ist auch nocht nie so ein Fehler aufgefallen.
Könnte jemand mal diesen Code bei sich ausprobieren, um zu schauen, ob ebenfalls dieser Fehler auftritt. Vorerst werde ich als Workaround die Optimierung deaktivieren...
Gruß
ASUR0
Und wenn du folgendes versuchst:
Code:void main() { while (1) { for (unsigned char i = 0 ; i < 10; i++); } }
Der gezeigte Fehler sollte normalerweise nicht auftreten. Das ist kein Fehler in dem C Programm, sondern ein Hinweis aus einen Fehler in GCC, der vermutlich relativ selten auftritt. Das Programm hier ist nur so, das da der Fehler in GCC(AVR) sichtbar wird.
Die Version von Winavr ist nicht mehr ganz neu, aber auch noch nicht so alt. Eventuell hilft es ja schon eine neuere Version von Winavr zu nehmen, weil der Fehler schon bereinigt wurde. Es kann auch ein Hinweiss auf eine nicht ganz korrekte Installation sein. Wenn der Fehler mit der neuen Version nicht mehr auftritt, erübrigt sich die Fehlermeldung.
Der Bugtracker scheint nicht mehr so wie früher zu funktionieren. Kann sein das es damit zu tun hat, dass WINAVR jetzt von ATMEL unterstützt wird.
Hallo,
so seltsam, wie der Fehler gekommen ist, so seltsam ist er auch wieder verschwunden.
Nach dem Hochfahren heute hat das Compilieren ohne Fehler geklappt...
@TobiKa
Das ist so weit ich weiß C++ Syntax, in C führt das zu Compilerfehler
@Besserwessi
Ich habe gehört, dass WinAVR so nicht mehr weiterentwickelt wird. Meine Version ist schon die aktuellste.
Nun ja, da kann ich wohl weiterprogrammieren.
Trotzdem Danke für die Antworten.
ASUR0
Das ganze sieht nicht aus wie ein Fehler im Compiler, sondern so als habe irgendwas die ausführbaren Dateien von GCC oder Bibliotheken zerschossen. Vielleicht in memory-Leak in einem anderen Programm, das munter die GCC-Executables überschreibt.
Dafür spricht auch, daß der Fehler nach einem Neustart weg ist (GCC-Executables wurden neu in den Speicher geladen).
Disclaimer: none. Sue me.
Lesezeichen