PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .hex Datei wird nicht etstellt



ijjiij
05.01.2012, 21:58
Hallo,

Also nachdem meine erste Schaltung (mehr oder weniger nur ein AtMega32 mit ISP anschluss und 2 LEDs) nun endlich fertig ist, wollte ich mich mal an die Programmierung setzen. Beim Asuro ging das ja ganz einfach, aus einer .c-Datei eine .hex-Datei zu machen und ie zu übertragen. Dachte ich mit, das muss doch hier auch ganz ähnlich gehen.

Also hab ich mir ein (meiner Meinung nach passendes) makefile von MFile aus WinAvr machen lassen und den LED-Blink-Code aus der RN-Wiki kopiert.


// Testprogramm: Blinken auf Pin PC0
//
#ifndef MCU // Welcher AVR genutzt wird, wird i.A. im Makefile definiert
#define MCU atmega32
#endif

#ifndef F_CPU // kann auch im Makefile definiert sein
#define F_CPU 1000000UL // Takt als LONG definieren, da zu groß für Integer
#endif



#include <avr/io.h> // Namen der IO Register
#include <util/delay.h> // Funktionen zum warten
// Achtung, damit delay richtig funktioniert muß mit Optimierung compiliert werden

int main(void)
{
DDRC = _BV(0); // Nur PC0 als output, _BV(0) = (1<<0) = 1
PORTC = 254; // Pullups auf allen anderen Pins

while (1)
{
PORTC &= 255-_BV(0); // 0 auf Bit 0 Ausgeben, Rest so lassen
_delay_ms(100); // 100 ms Warten
PORTC |= _BV(0); // 1 auf Bit 0 Ausgeben, Rest so lassen
_delay_ms(100);
}
}

So, wenn ich jetzt mein make-all.bat ausführe (da steht ja eig nur "make all" drin), dann werden auch brav neue Datein erstellt. Also ich bekomme ein neues Verzeichnis .dept, in welchem sich die datei main.o.d befindet. Außerdem bekomme ich die Datein main.lst, main.map und main.o.
Leider aber keine .hex-Datei, die ich dann auf meinen µC übertragen könnte.

Was genau brauch ich da jetzt falsch?
Am makefile selbst wirds ja wohl kaum liegen, wenn das von einem Programm aus WinAvr so erstellt wird, sollte das ja schon richtig sein oder?

lg
ijjiij

sternst
06.01.2012, 00:26
Und was kommt als Bildschirm-Output beim Ausführen von make-all.bat?

ijjiij
06.01.2012, 02:28
Also, wenn ich die make-all.bat per doppelklick ausführe öffnet sich die Konsole, Einiges an Text lauft ganz schnell über den Bildschirm, leider zu schnell das man irgendwas davon lesen könnte, und die Konsole geht wieder zu.

Bei starten der make-all.bat über die CMD gibts folgende Fehlermeldung: "make: *** No rule to make target 'all'. Stop."
Weiters passiert hier garnichts, es wird also auch nichts erstellt.

sternst
06.01.2012, 02:38
Also, wenn ich die make-all.bat per doppelklick ausführe öffnet sich die Konsole, Einiges an Text lauft ganz schnell über den Bildschirm, leider zu schnell das man irgendwas davon lesen könnte, und die Konsole geht wieder zu.Batch-Datei öffnen (bei der Gelegenheit auch gleich mal den Inhalt hier posten) und als letzte Zeile "pause" ergänzen.

ijjiij
06.01.2012, 02:47
Wie gewünscht hier die Ausgabe in der Konsole:



-------- begin --------
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


Linking: main.elf
avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funs
igned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhln
s=main.o -std=gnu99 -MMD -MP -MF .dep/main.elf.d main.o --output main.elf -Wl,-
Map=main.map,--cref -lm
main.o(.text+0x16): In function `main':
: undefined reference to `_delay_ms'
main.o(.text+0x20): In function `main':
: undefined reference to `_delay_ms'
make: *** [main.elf] Error 1


Und hier der Inhalt der Batch-Datei:

make all
pause

Hoffe du wirst schlau daraus,
Danke für deine Hilfe!

sternst
06.01.2012, 02:54
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
Geht's nicht vielleicht noch ein wenig älter?
Deine AVR-Libc wird dann ja wohl vom gleichen Kaliber sein. Und diese prähistorische Version hatte wohl noch kein _delay_ms.

ijjiij
06.01.2012, 03:03
wo bekomm ich denn eine neuere version davon her? oder hat der avr-gcc iwie eine auto-update funktion dabei?
muss ich die alte version zuerst deinstallieren, bevor ich eine neuere drauf installiere?

weil eigentlich habe ich heute erst die neue version von WinAVR installiert (20100110), ka wieso da ein veraltetes avr-gcc dabei war...

sternst
06.01.2012, 03:08
wo bekomm ich denn eine neuere version davon her?http://sourceforge.net/projects/winavr/files/WinAVR/20100110/


muss ich die alte version zuerst deinstallieren, bevor ich eine neuere drauf installiere?Musst du nicht unbedingt, wäre aber empfehlenswert.

sternst
06.01.2012, 03:11
weil eigentlich habe ich heute erst die neue version von WinAVR installiert (20100110), ka wieso da ein veraltetes avr-gcc dabei war...Der 3.3.1 war da mit Sicherheit nicht mit drin. Den musst du noch anderweitig auf der Platte rumliegen haben. Und wenn du WinAVR bei der Installation nicht erlaubt hast, PATH zu modifizieren, dann wird auch noch der alte Kram weiterhin verwendet.

ijjiij
06.01.2012, 03:19
Also ich hab gerade alle WinAVR-Teile deinstalliert, danach die neueste Version installiert, nach etwas herumspielen mit den beiden Batch-Files hab ichs jetzt entgültig geschafft, alle Files zu erstellen!

Vielen lieben Dank für deine Geduld und Hilfe!

LG
ijjiij