heise online
  • c't
  • iX
  • Technology Review
  • Mac & i
  • mobil
  • Security
  • Netze
  • Open Source
  • Developer
  • c't-TV
  • Download
  • Telepolis
  • Resale
  • Foto
  • Autos
  • Preisvergleich
  • Stellenmarkt
  • Abo
  • weitere Angebote
    • Shop
    • Artikel-Archiv
    • Veranstaltungen
    • Whitepapers
    • heise-marktplatz
    • IT-Markt
    • Tarifrechner
    • Jobs bei Heise

c't Magazin
  • Startseite
  • Artikel
  • c't-Projekte
  • Hotline & FAQ
  • Treiber & mehr
  • Kolumnen
Software zu Projekten Allgemeine Hinweise
Archiv-Suche Newsletter RSS-FeedRSS

c't › c't-Projekte

Trac
  • Login
  • Help/Guide
  • About Trac
  • Preferences
  • Wiki
  • Timeline
  • Roadmap
  • Browse Source
  • View Tickets
  • Search

Context Navigation

  • Start Page
  • Index
  • History
  • Last Change

  1. Toolchain und Build-System
    1. Firmware für den AVR-Mikrocontroller erzeugen
    2. Interna der AVR-Toolchain
      1. Der Build-Prozess
      2. Die avr-libc

Toolchain und Build-System

Firmware für den AVR-Mikrocontroller erzeugen

Damit die im Folgenden benötigten Dateien im Verzeichnis des Bot-Codes erstellt werden, stellt man in Eclipse die Zielplattform MCU ein:


Aktueller Code (ab Release 21 bzw. SVN-Revision 1853):

  • Debug-MCU-m[32|644|644p|1284p] (je nach Prozessortyp, der im Bot installiert ist, also ATmega32, ATmega644, ATmega644p oder ATmega1284p).
  • Die benötigten Dateien ct-Bot.hex und ct-Bot.eep befinden sich anschließend im Unterverzeichnis Debug-MCU-mX.

Älterer Code (bis einschließlich Release 20):

  • Unter Windows ist Debug-MCU-m[32|644|644p|1284p]-W32 die richtige Wahl, sonst (Linux und Mac OS X) wählt man Debug-MCU-m[32|644|644p|1284p]-Linux (je nach Prozessortyp, der im Bot installiert ist, also ATmega32, ATmega644, ATmega644p oder ATmega1284p).
  • Die benötigten Dateien ct-Bot.hex und ct-Bot.eep befinden sich anschließend im Unterverzeichnis Debug-MCU-mX-W32 bzw. Debug-MCU-mX-Linux.

Um schneller zwischen den Zielplattformen umschalten zu können, bietet es sich an, die Toolbar Build Configuration einzublenden (Window -> Customize Perspective -> Commands -> Haken bei Build Configuration), dann kann die Auswahl auch bequem über das Hammer-Symbol erfolgen.

Interna der AVR-Toolchain

Hier gibt es ein paar weitergehende Informationen und Links zur Toolchain für die AVR-Softwareentwicklung. Diese sind für das Erstellen und Anpassen von Verhalten nicht unbedingt erforderlich, aber eventuell hilfreich zum tieferen Verständnis oder für Code-Optimierungen.

Der Build-Prozess

Welche der erstellten Dateien im c't-Bot-Verzeichnis ist eigentlich wofür und was ist damit zu tun?

Compiler, Assembler und Linker (avr-gcc, avr-as, avr-ld) erstellen aus dem Quellcode zunächst eine .elf-Datei. Diese enthält erstens das Programm für den AVR-µController (text genannt) und zweitens alle Daten des Programms, also den Inhalt aller Variableninitialisierungen.

Die Daten unterteilen sich beim c't-Bot-Framework in drei Teile:

  1. alle globalen und statischen Variablen, die mit Null initialisiert sind und nicht extra gespeichert werden - der entsprechende Inhalt wird vor dem Aufruf von main() einfach mit Nullen beschrieben - (bss genannt).
  2. alle globalen und statischen Variablen, die mit anderen Werten initialisiert werden, hier steht in der elf-Datei für jede Variable der Anfangswert (dieser Abschnitt wird data genannt).
  3. die Anfangswerte aller Variablen, die als EEPROM deklariert sind (hier eeprom genannt).
  • text und data müssen in den Flash-Speicher des µControllers, daher kommen sie nach dem Build in die Datei ct-Bot.hex.
  • data wird vor dem Programmstart vom Flash ins RAM kopiert, bss wird anschließend einfach mit Nullen beschrieben, liegt also zur Laufzeit genau wie data im RAM.
  • eeprom beinhaltet die Anfangswerte für das EEPROM des µControllers. Dieses muss extra beschrieben werden, z.B. möchte man die dort gespeicherten Daten auch nach einem Programm-Update (im Flash-Speicher) noch erhalten haben. Um aber einmal die Anfangswerte für das EEPROM auf den µController bekommen zu können, wird nach dem Build-Prozess die Datei ct-Bot.eep erstellt, die eben diese Anfangswerte der Daten, die im EEPROM gespeichert werden, enthält. Diese überträgt man (einmalig) ebenfalls mit dem Programmer auf den Bot, siehe auch Flash-Anleitung.


Ein (vereinfachtes) Beispiel bezogen auf "normale" PC-Anwendungen:

In der .hex-Datei befindet sich das, was bei einer normalen Anwendung in der auszuführenden Datei steht, also die Anwendung selbst ist. Gibt es beispielsweise ein Programm "Kalender", dann entspricht das der Datei "Calendar(.exe)", die aufgerufen wird, wenn das Programm gestartet wird.
Nun möchte man aber vielleicht alle Feiertage gleich mitgeliefert bekommen. Das sind Daten, die bei der Installation einmal geschrieben werden sollen, aber später bei einem Update nicht mehr (die bereits eingetragenen Termine sollen ja nicht überschrieben werden). Die Datei mit den Anfangsdaten (Feiertagen) entspricht dann der .eep-Datei beim c't-Bot.

Anmerkung: Das Format der genannten Dateien ist unterschiedlich und passt im Beispiel nicht ganz, für den Zusammenhang und die Erklärung spielt das hier aber keine Rolle.

=== Der Compiler == =

ToDo: Das Wichtigste aus den Links selbst zusammenfassen?

  •  Übersicht zum avr-gcc inkl. Kommandozeilen-Optionen
  •  Interna des avr-gcc inkl. ABI
  •  Inline-Assembler für avr-gcc

Die avr-libc

ToDo: Kurze Erklärung zur avr-libc

  •  avr-libc-Handbuch

Attachments

  • select_target.png Download (90.8 KB) - added by bbe 4 months ago.

Download in other formats:

  • Plain Text

Trac Powered

Powered by Trac 0.11.7
By Edgewall Software.

http://www.ctmagazin.de/
http://www.ctmagazin.de/projekte/

  • Datenschutzhinweis
  • Impressum
  • Kritik, Anregungen bitte an c't-WWW
  • Mediadaten
  • Copyright © 2011 Heise Zeitschriften Verlag
  • International: The H, The H Security, The H Open Source