Ergänzung:
https://www.google.de/search?q=gcc-avr+bit+schieben
(PD3 wird über io.h definiert.)
Ergänzung:
https://www.google.de/search?q=gcc-avr+bit+schieben
(PD3 wird über io.h definiert.)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo!
Okay danke euch genau die Stichwörter haben mir für eine vernünftige Suche gefehlt!![]()
Grüße
Also das mit dem Bitshift-Operator habe ich nun denke ich mal verstanden. Aus einem SWITCH_ON entsteht letztendlich ein
PORTD = PORTD | (1<<PD3)
Letztlich entsteht durch das bitweise ODER ein 8h für PORTD (vorher 0h), also High Pegel an Pin 5. Richtig?
Nun noch eine VerständnisfrageIch habe ein paar Probleme mit dem Begriff Makro im Zusammenhang mit der #define Direktive. Nach
http://www2.informatik.uni-halle.de/.../c_define.html
gibt es ja zwei Möglichkeiten für die Verwendung von #define (einmal als Makro und einmal als symbolische Konstante). Einfache Makro-Beispiele wie auf
http://roseindia.net/c-tutorials/c-define-macro.shtml
kann ich nachvollziehen.
Ich kann allerdings den schon genannten Ausdruck #define SWITCHES (1 << PD3) nicht zuordnen. Wäre das ein Makro fehlt ja noch die "ersatzliste". Allerdings irritiert mich die Klammerung, so es denn kein Makro ist. Oder ist das ein "verschachteltes" Makro?
Übrigens gibt es in meiner io.h den String PD3 nicht, ist wohl in einer der unzähligen weiteren Header-Dateien die dort aufgeführt sind verborgen.
Bin wiederum für Tipps dankbar![]()
Geändert von Swordfish6 (03.11.2012 um 19:09 Uhr)
Hallo
Zu #define SWITCHES (1 << PD3)
Hier handelt es sich nur um eine Ersetzung. Die Klammern dienen der besseren Lesbarkeit und könnten hier auch weggelassen werden, denn << hat eine höhere Bindung als das |
https://www.google.de/search?q=bindung+der+operatoren
(Bindung entspricht in etwa dem bekannten "Punkt vor Strich")
Klammern belegen keinen Speicherplatz im kompilierten Programm und erhöhen die Lesbarkeit des Codes beträchtlich.
In io.h wird nach dem entsprechenden Kontroller verzweigt (-mmcu=xxx im Makefile/gcc-Kommandozeile):
#elif defined (__AVR_ATmega8__) // anderenfalls, wenn es sich um einen Mega8 handelt....
# include <avr/iom8.h> // ... dann binde die IO-Definitionen für den Mega8 ein
und in iom8.h findet man dann (unter anderem):
GrußCode:/* PORTD */ #define PD7 7 #define PD6 6 #define PD5 5 #define PD4 4 #define PD3 3 #define PD2 2 #define PD1 1 #define PD0 0
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo radbruch,
Vielen Dank für die schnelle und ausführliche Antwort!
Grüße
Lesezeichen