Hallo,
ich möchte bei meiner LCD-Ansteuerung die Anschlüsse variabel gestalten.
Werden jedoch die Steuer- und Datenleitungen an einem Port verwendet, so
wird die Datenrichtungseinstellung einfacher (ganzer Port).
Dieses wollte ich dem gcc mit den Zeilen:
#define LCD_DATA_PORT PORTB
#define LCD_DATA_PORT PORTB
#if (((int)(&LCD_DATA_PORT)) == ((int)(&LCD_CTRL_PORT)))
DDROFPORT(LCD_DATA_PORT) = 0xFF;
#else
DDROFPORT(LCD_DATA_PORT) |= (0x0F<<LCD_DATA_OFFSET);
DDROFPORT(LCD_CTRL_PORT) |= (1<<LCD_PIN_RS) | (1<<LCD_PIN_RW) |
(1<<LCD_PIN_E1) | (1<<LCD_PIN_E2);
#endif
nun bekomme ich aber die Fehlermeldung:
error: missing binary operator before token "("
Auch in vielen anderen Schreibweisen geht es nicht, wie sieht die Zeile
richtig aus?
wieso definierst du zweimal LCD_DATA_PORT? Außerdem sind casts und der Adreßoperator Operatoren des Compilers, nicht des PP. Der kann damit nichts anfangen.
Hallo Klaus, ein kleiner Schreibfehler. Dann die Frage neu: Kann der PP aus dem PortB eine Zahl für den Vergleich bei #if machen? Hardy
Gast
#1571182
Dazu müßte der PP auf dem Mikrocontoller laufen, um den Wert des Ports abfragen zu können. Der PP läuft aber auf Deinem PC, und zwar vor dem eigentlichen C-Compiler-Lauf.
Gast
#1571202
Hardy Flor schrieb: > Dann die Frage neu: Kann der PP aus dem PortB eine Zahl für den > Vergleich bei #if machen? Dazu kuckst Du am besten einfach mal nach, was der Präprozessor so daraus macht, z.B. mit folgendem Quellcodefragment:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Das jagst Du dann durch den Präprozessor, z.B. so:
1 | |
..uns siehst in die Ausgabe, die sieht dann z.B. so aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
..und schon weisst Du, was der Präprozessor aus dem 'PORTB' gemacht hat - und nein, das wird so nix mit 'Zahlvergleich per #if'. Und auf die Frage, wie man den Präprozessor zu eine Stringvergleich prügeln könnte gibts auch schon eine Antwort [1] :-) HTH [1] http://c-faq.com/cpp/ifstrcmp.html
Danke für die Antworten, ich habe nun noch eine #define-Zeile mit einer Zahl hinzugefügt, da muß ich halt noch eine Zeile mehr ändern. Das mit dem String-Vergleich hatte ich auch schon gefunden, ist es nicht langsam an der Zeit, daß der PP auch Strings vergleichen kann? Hardy PS @gast2: Du hast schon meine Eingangsfrage gelesen? Es geht um die Definition von Leitungen an den Ports und der Optimierung des Programm vor dem Übersetzen.