Hallo,
wenn ich versuche, mein C Programm zu kompillieren, kommt die Meldung
"Das Programm avr1.exe hat Fehler verursacht und wird geschlossen.
Starten Sie das Programm neu."
Der Quellcode:
1
#include<avr/io.h>
2
3
intmain(void)
4
{
5
6
intn;
7
DDRB=0x08;
8
while(1)
9
{
10
PORTB=8;
11
for(n=0;n<30000;n++);
12
PORTB=0;
13
for(n=0;n<30000;n++);
14
}
15
16
return1;
17
}
Dann kommt noch die Meldung:
Process terminated with status 1 (0 minutes, 1 seconds)
0 errors, 0 warnings
Und im Projektverzeichniss finde ich dann kein Hex File. Ich benutze
Code::Blocks und habe auch schon den Pfad zu WinAVR udn den Compiler
eingestellt.
Ja... denk mal drüber nach, warum man (auch wenn es nie erreicht werden
sollte bei der Entlosschleife) ein return macht....
und dann schau mal, was dein return macht ;)
Also ganz simple, das letzte ruturn sollte ein return 0 sein, damit klar
ist, das keine Fehler aufgetreten sind, daran stört sich dein compiler
offensichtlich...
Jetzt habe ich das geändert aber trotzdem kommt immer noch die Meldung
"cc1.exe hat Fehler verursacht und wird beendet. Starten Sie das
Programm neu." cc1.exe liegt in e:\WinAVR\libexec\gcc\avr\4.1.1
Genmutant schrieb:
> Ich vermute eher, du startest nebenbei das Programm... Das wird dann>> natürlich auf deinem PC nicht funktionieren :D
Hallo,
wie denn, wenn es weder ein Hex-File, noch eine exe noch sont irgendein
File gibt? (Mal abgesehen von dem main.c)
Und wo kommt dann die Fehlermeldung deiner Meinung nach her, dass deine
nichtexistente .exe (?) einen Fehler verursacht hat?
"Das Programm avr1.exe hat Fehler verursacht und wird geschlossen."
mbuettner schrieb:
> Jetzt habe ich das geändert aber trotzdem kommt immer noch die Meldung> "cc1.exe hat Fehler verursacht und wird beendet.
Du solltest dich mit dir selbst einigen, ob du Fehlermeldungen exakt
widergeben willst oder nicht.
Im Eröffnungsposting war das noch
"Das Programm avr1.exe hat Fehler verursacht
und das ist ein ganz anderes Programm.
Wer hat jetzt den Fehler verursacht:
cc1.exe das ist Teil des Compilers.
d.h. du hast einen Bug im Compiler gefunden, der ihn
zum Absturz bringt.
(auch wenn ich das kaum glauben mag)
avr1.exe das ist seltsam, denn wo hättest du ein EXE her
das auf deinem PC läuft?
mbuettner schrieb:
> @Genmutant:> Das erste war ein Fehler von mir. Aber warum verursacht cc1.exe einen> Fehler?
Da ist in deiner Installation des C-Compilers etwas verbockt.
mbuettner schrieb:
> "Das Programm avr1.exe hat Fehler verursacht und wird geschlossen.> Starten Sie das Programm neu."
Dann mußt Du feststellen, zu welcher Toolchain diese Programm gehört.
Es gehört nicht zu WINAVR.
Ich würde zu WINAVR das AVRStudio empfehlen, das ist anfängertauglich
und narrensicher.
Und wenn es damit funktioniert, kannst Du meinetwegen mit
komplizierteren Toolchains rumbasteln.
Dein Programm wird korrekt compiliert:
Habe gerade mal aus reiner Neugier "Code::Blocks" (16 January 2010
build) zusätzlich zu einer bestehenden WinAVR+AVRStudio-Installation
installiert. Funktioniert problemlos, kompiliert ohne Schwierigkeiten
und erzeugt ein .hex-File im vorher angegebenen Projektverzeichnis.
Eine Datei namens "avr1.exe" konnte ich allerdings nirgendwo entdecken,
weder in WinAVR noch in Code::Blocks. Kann es sein, dass dein Projekt so
heißt? Ich vermute mal, abgesehen von einer möglicherweise fehlerhaften
Installation, du hast da irgendwas falsch eingestellt, deine IDE meint
vielleicht da würde irgendwas zu "avr1"-(x86) kompiliert werden und
versucht das dann zu linken und anschließend zu starten, das gibt dann
im besten Fall eine fehlerhafte .exe oder eine 0-Byte-Datei, die beim
Versuch sie zu starten diese Fehlermeldung verursacht.
wIE GESAGT prinzipiell funktioniert das alles, und ich habe weder bei
meiner WinAVR-, noch bei meiner AVRStudio-, noch bei der
Code::Blocks-Installation besondere Einstellungen vorgenommen, (hat dir
Code::Blocks angezeigt, dass es AVR-GCC "detected" hat?).
P.S.:
Die "for (n = 0; n < 30000; n++);", werden in der Standardeinstellung im
Realease-Build ersatzlos wegkompiliert.
mbuettner schrieb:
> Hmm, jetzt habe ich zwei main.elf, eine main.elf.hex und eine> main.elf.eep.hex. Welche soll ich in den Microcontroller laden?> *Nachdenk*
Die main.elf.hex !
Die main.elf.eep.hex ist eine EPROM-Datei, da hast du bis jetzt aber
noch nichts drin, kannst natürlich auch beide Dateien an den Controller
schicken.
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.