Forum: Compiler & IDEs erste Schritte mit ATMega8


von F.Schmidt (Gast)


Lesenswert?

Hi,

ich bin gerade dabei mich mit
dem ATMega8 zu befassen, was dann
auch mein erster Kontakt mit mcu's
überhaupt wäre.
Leider schaff ich es nicht mal ein
Programm mit avr-gcc zu compilieren,
dass nichts macht:

int main(void)
{
  return 0;
}

avr-gcc -mmcu=atmega8 -o first first.c

Eine Fehlermeldung bekomme ich nicht, die Datei wird
aber immer ca. 3,7 kB groß und wenn ich sie öffne
dann sieht mir das eher nach einem linux-binary
aus: " ELF" leitet das File ein,
als nach einem reinem hex-file.

kann mir mal jemand kurz erklären wie man korrekt
compiliert, damit ich wenigstens eine Grundlage hab?

thx, Franz

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

avr-objcopy -O ihex first.elf first.hex

von F.Schmidt (Gast)


Lesenswert?

Hey, Danke, dass hat funktioniert

aber noch eine Frage: wann genau beginnt der mcu eigentl.
damit das programm auszuführen?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Nach dem Reset.

von F.Schmidt (Gast)


Lesenswert?

achso, d.h. wenn ich den Strom wegnehm und anschließend
wieder anleg passiert nichts, bevor nicht ein reset-signal
kommt?

von Matthias (Gast)


Lesenswert?

Hi

Doch. Nach dem anlegen der Versorgungsspannung beginnt beim ATMega8 ein
interner Ablauf (der sog. PowerOnReset). Ist dieser abgeschlossen
startet dein Programm wenn der externe Reset-Pin nich low ist.

Matthias

von F.Schmidt (Gast)


Lesenswert?

danke :)

von Fritz Ganter (Gast)


Lesenswert?

Das return 0 kannst weglassen, du darfst eh nie aus main raus. Es sollte
also immer sein:


main()
{

// initialisierung

 for (;;)
 {
  //deine Hauptschleife
 }

}

von OldBug (Gast)


Lesenswert?

Das stimmt so nicht!

avr-gcc besteht zwar nicht auf "never reached" return, aber
eigentlich gehört es da hin!

Das hier ist auch nicht ganz so schön:
main()

Besser:
int main(void){...}

Gruß,
Patrick...

von Fritz Ganter (Gast)


Lesenswert?

wennst int main schreibst, musst auch return machen

void main ohne return wär richtiger

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
Noch kein Account? Hier anmelden.