www.mikrocontroller.net

Forum: Compiler & IDEs erste Schritte mit ATMega8


Autor: F.Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
avr-objcopy -O ihex first.elf first.hex

Autor: F.Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, Danke, dass hat funktioniert

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach dem Reset.

Autor: F.Schmidt (Gast)
Datum:

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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: F.Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke :)

Autor: Fritz Ganter (Gast)
Datum:

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


main()
{

// initialisierung

 for (;;)
 {
  //deine Hauptschleife
 }

}

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Fritz Ganter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wennst int main schreibst, musst auch return machen

void main ohne return wär richtiger

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.