Hallo,
ich möchte meinen code etwas übersichtlicher und wartbarer machen.
Ich habe ein LCD Display an meinen XMega angeschlossen und möchte nun
die einzelnen Leitungen benennen.
Beispiel: Für die LEDOff Leitung des LCDs welche die Beleuchtung steuert
möchte ich
#define LCD_LED PA0
um anschließend im Code wie folgt die Beleuchtung steuern zu können
LCD_LED = 1;
Ist das überhaupt möglich?
Gruß Franz
nichtmal
#define LCD_cmd PORTA
#define LCD_nRST 0
LCD_data |= (1 << LCD_nRST);
funktioniert obwohl man es über die suche oft so findet.
invalid operands to binary & (have 'PORT_t' and 'int')
Kann mir niemand helfen?
Gruß Franz
Franz schrieb:> ... hast mich nicht richtig verstanden.
im ersten Teil hattest Du nichts anderes gefragt
> nicht nur für> LCD_LED = 1> sondern auch für> if(LCD_LED == 1)
Codevision kann das. Macht den Code leider nicht besonders portierbar
aber schön übersichtlich.
Rudi
Franz schrieb:> nichtmal>> #define LCD_cmd PORTA> #define LCD_nRST 0>> LCD_data |= (1 << LCD_nRST);>> funktioniert obwohl man es über die suche oft so findet.>> invalid operands to binary & (have 'PORT_t' and 'int')>> Kann mir niemand helfen?>> Gruß Franz
Das versteh ich nicht ganz, LCD_data ist nirgendwo definiert.
Mini Float schrieb:> Nicht sowas wie "sieht schön aus aber geht nur bei IAR"...Sven P. schrieb:> Für GCC
Und auch nicht sowas wie "sieht schön aus aber geht nur mit GCC"...
Aber gut, wenn ihr nicht wollt, dass euer Code portabel ist, dann eben
nicht.
mfg mf
Mini Float schrieb:> Aber gut, wenn ihr nicht wollt, dass euer Code portabel ist, dann eben> nicht.
Über 'Portabilität' kann man sich in diesem Fall nun freilich drüber
streiten...
Sven P. schrieb:> Mit noch mehr Präprozessor kann man es portabel eindampfen:
Inwiefern ist io.h eigentlich essentiell abhängig von GCC? Das
Inline-Verbot ist für die Frage hier irrelevant und die structs müssten
eigentlich auch ohne "packed" schon frei von Löchern sein. Der Rest ist
normales C.
Dass Bitfields allgemein als schwach portabel gelten ist klar, aber ganz
so schlimm ist es dann doch nicht, wenn man damit Portpins anspricht und
damit die Architektur sowieso festnagelt.
Franz schrieb:> nichtmal>> #define LCD_cmd PORTA> #define LCD_nRST 0>> LCD_data |= (1 << LCD_nRST);>> funktioniert obwohl man es über die suche oft so findet.
Dann versuch's doch mal mit:
1
LCD_cmd|=(1<<LCD_nRST);
> invalid operands to binary & (have 'PORT_t' and 'int')
Da in dem Code gar kein & vorkommt, muß da wohl ein falsches Makro
irgendwas seltsames tun.
A. K. schrieb:> Inwiefern ist io.h eigentlich essentiell abhängig von GCC? Das> Inline-Verbot ist für die Frage hier irrelevant und die structs müssten> eigentlich auch ohne "packed" schon frei von Löchern sein. Der Rest ist> normales C.
Naja, das ist eigentlich der einzige Knackpunkt.
> Dass Bitfields allgemein als schwach portabel gelten ist klar, aber ganz> so schlimm ist es dann doch nicht, wenn man damit Portpins anspricht und> damit die Architektur sowieso festnagelt.
Darauf zielte ich nämlich weiter oben schon ab. Einen Abstraktionslayer
zu abstrahieren, ist ziemlich sinnfrei. Irgendwo muss man ja an die
Hardware anbauen.
Reine Lehre wäre dann wohl nur die vollständige Kapselung in Methoden,
sodass man schlimmstenfalls noch mit etwas Programmlogik nachhelfen
kann, wenn die Zuordnung der Ports nicht mehr direkt gegeben ist.