-         

Ergebnis 1 bis 4 von 4

Thema: Include für AVR Typen

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.06.2006
    Beiträge
    473

    Include für AVR Typen

    Anzeige

    Hallo zusammen,

    ich war bisher nur im Assemblerbereich unterwegs. Nachdem ich jetzt mal eine DCF77 Decodierung darin gemacht habe, bin ich der Meinung langsam mal auf C umzusteigen...

    Habe natürlich erstmal den Blick in RN_Wissen schweifen lassen und habe zu den Include eine Frage. Habe ich das richtig verstanden, dass ich mit
    "#include <avr/io.h>"
    alle unterstützten Derivate includiere? Sehe ich das richtig, das dort die Pin, Register, etc. Adressen definiert werden? Dann würde das doch keinen Sinn machen, auf die Art alle AVR´s zu includiere, weil die Adressen doch variieren.
    Kann mir jemand dieses Gedankenproblem lösen?

    Danke,
    The Man

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Werf mal nen Blick in die io.h.
    Dort wird geprüft, welcher Controllertyp im makefile eingestellt ist. Dementsprechend wird dann die Datei mit den passenden Definitionen eingebunden.
    Der Sinn dabei: So gibt es nur eine einzige Stelle, an der man den Typ einstellen muss, nämlich im makefile. Verhindert so manchen extrem schwer zu findenden Fehler. Außerdem werden von der io.h noch etliche Sachen eingebunden, die für alle AVRs gleich sind.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Prinzipiell korrekt, aber die Entscheidung, welche Definitionen die avr/io.h nach sich zieht wird über die Kommandozeile des Compilers bestimmt. Auch ohne Make(file) funktioniert das.

    Über den avr-gcc Schalter -mmcu=atmega8 wird zB für den µC ATmega8 übersetzt, der ja einen andern Befehlssatz hat als zB ein ATtinyXX.

    Ausserdem setzt avr-gcc bestimmte builtin-Makros wie in diesem Falle __AVR_ATmega8__, anhand denen im avr/io.h Unterscheidungen getroffen werden können. Es werden auch Defines gesett die Aussagen über den Befehlssatz machen, ob ein MUL-Befehl vorhanden ist etc.

    Ausserdem müssen die binutils wissen für welchen µC sie assemblieren und linken sollen, um zB den richtigen Startup-Code einbinden zu können. Dazu reicht der Compiler die µC-Kennung per Kommandozeile an die nachgeschalteten Tools weiter.

    Diese Makros kannst du in deinem Programm auch lesend verwenden, aber das ist idR nicht erforderlich.

    Es kann aber ganz hilfreich sein, wenn man zB eine allgemeine UART-Routine schreibt und Maschinenabhängigkeiten rausparametrisieren will, weil die Registernamen nicht überall gleich sind.

    http://www.roboternetz.de/wissen/ind...C3.BCr_avr-gcc
    Disclaimer: none. Sue me.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    04.04.2005
    Ort
    Hamburg
    Alter
    29
    Beiträge
    826
    http://www.nongnu.org/avr-libc/user-...__avr__io.html

    Hier steht der Kram auch nochmal "offiziell" beschrieben.
    www.subms.de
    Aktuell: Flaschcraft Funkboard - Informationssammlung

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •