Hallo allerseits, Ich steige gerade in die Programmierung eines ATtiny ein (ist zwar nicht der erste avr-Kontakt, aber der letzte liegt schon eine ganze Weile zurück). Dabei stoße ich auf diesen möglichen Fehler, zu dem ich im Netz noch gar nichts gefunden habe: Kurzform: Ist main() nicht die erste Funktion im Sourcecode, geht es nicht. Beispiel (am Port hängen LEDs): ----- Start ----- #include <avr/io.h> #include <avr/interrupt.h> void init(); int main() { init(); PORTD = 0x32; while(1); return 0; } void init() { DDRD = 0xff; } ----- Ende ----- Mit diesem Programm funktioniert es und die LEDs werden korrekt eingeschaltet. ----- Start ----- #include <avr/io.h> #include <avr/interrupt.h> void init() { DDRD = 0xff; } int main() { init(); PORTD = 0x32; while(1); return 0; } ----- Ende ----- Mit diesem Programm funktioniert es nicht, die LEDs bleiben dunkel. Soll das so sein (nach den Beispielen natürlich nicht), oder hat jemand irgendeine Idee, was das sein könnte? Prozessor ist ein ATtiny48, die avr-Tools habe ich unter einem ziemlich aktuellen Ubuntu installiert (gcc 4.5.3), kompilieren tu ich mit avr-gcc -mmcu=attiny48 -c source.c dann linken usw. Im Prinzip ist mir die Anordnung der Funktionen ja egal, allerdings habe ich Probleme mit der Ausführung von Interrupts, und da wollte ich erst mal sichergehen, daß das nicht an dieser Stelle hängt.. tschüß und danke schon mal!
Mareau schrieb: > dann linken usw. Zeigen, insbesondere wenn ... > allerdings habe ich Probleme mit der Ausführung von Interrupts
> Zeigen,
Oha, nicht schlecht, in die Richtung geht's:
avr-gcc -mmcu=attiny48 -c start.c
avr-gcc -o start.elf start.o
avr-objcopy -j .text -j .data -O ihex start.elf start.hex
sudo avrdude -c avrispmkII -p t48 -P usb -e -U flash:w:start.hex
Zur Sicherheit habe ich den Umweg übers separate Linken mal weggelassen,
also:
avr-gcc -mmcu=attiny48 -o start.elf start.c
avr-objcopy -j .text -j .data -O ihex start.elf start.hex
sudo avrdude -c avrispmkII -p t48 -P usb -e -U flash:w:start.hex
... und damit funktioniert es. Fehlt da etwa was beim Linken?
tschüß
Mareau schrieb: > Fehlt da etwa was beim Linken? Ja. -mmcu=attiny48. So linkst du für einen AT90S8515 (wenn ich mich recht erinnere).
Ach so, klingt nicht gerade verkehrt. Vielen Dank! tschüß
Im übrigen solltest du dir noch angewöhnen, grundsätzlich
1 | -Os -Wall -Wextra |
zu setzen.
Danke für den Hinweis, aber mache ich schon. Das ist nur gerade herausgefallen, um die Optimierung als Fehlerursache auszuschließen. tschüß
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.