www.gheinz.de
UP


Atmel-Portpins: Es geht einfacher

Will man beweisen, daß der Leser nicht genug Verstand zur Nutzung der Geniesprache C besitzt, schreibt man Konstruktionen zur Bitmanipulation am besten in der allercoolsten Form:

    PORTB.OUT |= (1< < PIN1) | (1< < PIN3) | (1< < PIN4) | (1< < PIN6) | (1< < PIN7);

Neulinge ärgern sich dann über die Bitschieberei mit den "kleiner-als"-Zeichen "<<". Ihre Aufmerksamkeit ist dahin. Kommen noch negierte Werte hinzu, wird es unübersichtlich, Frust kommt auf.

Aber die Schreibweise läßt sich vereinfachen. Dazu brauchen wir nur acht Konstanten (pinX) einzuführen:

    #define pin0 0x01       // 0b 0000 0001
    #define pin1 0x02       // 0b 0000 0010
    #define pin2 0x04       // 0b 0000 0100
    #define pin3 0x08       // 0b 0000 1000

    #define pin4 0x10       // 0b 0001 0000
    #define pin5 0x20       // 0b 0010 0000
    #define pin6 0x40       // 0b 0100 0000
    #define pin7 0x80       // 0b 1000 0000

Obiger Ausdruck heißt nun

    PORTB.OUT |= pin1 | pin3 | pin4 | pin6 | pin7;

Schieben wir die Defines jetzt noch in ein Atmel-Verzeichnis der Art <avr/portpins.h>, so haben wir für alle Zeit Frieden. Beim Xmega sparen wir uns das Nachsinnen über unnütze _bp oder _bm Konstrukte, _bp entfällt.

Die Konsequenz unseres Tuns sollte dennoch klar sein. Der Compiler kann nicht wissen, daß wir Bitwerte manipulieren, er nutzt jetzt Register-Befehle und spart Atmels sbic oder sbis aus.

GH






Impressum

Home: www.gheinz.de
Mails to info@gheinz.de