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
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