avr-gcc: Fehler? Reihenfolge der Funktionen ist wichtig

Gast #3010252
Lesenswert?
• ▲
▼
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!
Gast #3010461
Lesenswert?
• ▲
▼
> 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üß

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.