Hallo zusammen, könnt ihr mir bitte einen Tipp geben warum diese Anweisung siehe Bild so nicht funktioniert?? Ich definiere in der Headerdatei den keypad_port und möchte davon in Abhängigkeit des Taster definieren entweder Taster= PINA oder PINC Meine Anweisung funktioniert noch nicht ganz. Ich habe es nach den Unterlagen durchgeführt, die ich im Netz gefunden habe. http://de.wikibooks.org/wiki/C-Programmierung:_Pr%C3%A4prozessor#.23if Es wäre sehr nett, wenn ihr mir bei dieser Kleinigkeit helfen könntet. Herzlichsten Dank und viele Grüße, Matthias. hier ist die Headerdatei: #ifndef keypad_h #define keypad_h #define keypad_port PORTC #if (PORTC=keypad_port) #define Taster PINC #if (PORTA=keypad_port) #define Taster PINA #endif extern unsigned char flankenwechsel2; extern unsigned char keypad_uebergeben; //damit der Wert niht doppelt eingelesen werden kann char keypad_wert_einlesen(unsigned char warten); void keypad_ini(void); #endif
Das steht in deinem C-Buch aber nicht so drin, oder? Zu jedem #if, #ifdef etc. gehört genau ein #endif. Wenn man bei dir nachzählt, stimmt das nicht. Was du vorhast, weiß ich nicht. Aber ein Vergleich wird mit = auch nicht funktionieren, sollte auch in eine guten C-Buch stehen. Quelltext als Bilder einzufügen, ist Unsinn. Und lesbaren Quelltext bekommt man, indem man entsprechende Tags beim Schreiben benutzt. Und "geht nicht" ist so ziemlich der schlechteste Versuch, vernünftige Hilfe zu bekommen.
Gast
#2366923
Warum so kompliziert?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
### Oder ###
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
Wahrscheinlich hat du nur = und == verwechselt.
Hallo zusammen, danke für Eure Hilfe. Doch leider hat das nicht viel gebracht, denn ich bin kein Stück weiter. baue ich diese Aussage ein, gibt es immer 2 Fehlermeldungen operator has no left operand. Irgendwas stimmt wohl an der Syntax dennoch nicht und ich weiß nicht wieso. #if (PORTA==keypad_port) #define Taster PINA #endif #if (PORTB==keypad_port) #define Taster PINB #endif Mit dieser Aussage möchte ich eine bedingte Zuweisung von Taster zu PINA oder PINB. Viele Grüße, Matthias.
Gast
#2367576
PORTA ist ein Makro, das durch einen Ausdruck ersetzt wird, mit dem der Präprozessor selbst nichts anfangen kann, weil er z.B. Casts und Zeiger-Dereferenzierungen enthält.
Hallo, danke für Deine Antwort. Ich verstehe zwar noch nicht was Casts und Zeiger-Dereferenzierungen sind, aber es scheint wohl nicht ohne weiteres möglich zu sein meine Idee umzusetzen. Darum lasse ich es erst mal so. Viele Grüße, Matthias.
Gast
#2367675
Matthias H. schrieb: > Ich verstehe zwar noch nicht was Casts und Zeiger-Dereferenzierungen sind, Ok, dann soll für jetzt mal die Information ausreichen, daß es dem Präprozessor da genau wie dir geht. ;-)
ok, schön, dass Du das mit Humor nimmst. ich bin immer noch dabei meine alten ilcudierten C.Dateien!!! umzuschreiben 1. jeweils eine dazugehörige Headerdatei erstellen 2. die C-Datein richtig ins projekt einbinden über Add existing item AVR Studio5 Da ist viel Arbeit, wenn man 7 Dateien mit vielen Variablen hat und man Datei für Datei nach und nach wieder einbindet Viele Grüße, Matthias.
Dafür gibt es ein stichwort: Modularisierung! spart dir viel arbeit :-) wie verarbeitest du das makro denn weiter? diesen Fheler: operator has no left operand. hast du ja bereits im bild oben, ich vermute du hast irgendwo anders im code noch einen kleinen fehler drin, aber lass dich davon nicht entmutigen, das passiert :)
Matthias H. schrieb: > Ich verstehe zwar noch nicht was Casts und > Zeiger-Dereferenzierungen sind Dann schreib' dir mal eine Minimal-Datei:
1 | |
2 | |
3 | |
schick diese Datei durch den Präprozessor und sieh dir das Ergebnis an:
1 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
