Präprozessoranweisung das erste Mal

OP #2366902
Lesenswert?

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
Angehängte Dateien:
#2366916
Lesenswert?

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
Lesenswert?

Warum so kompliziert?
1
#ifndef keypad_h
2
#define keypad_h
3

4
/*
5
 Hardwaredefinitionen
6
 (avr/io.h muss bereits includiert sein)
7
 */
8
#define keypad_port PORTC
9
#define Taster PINC
10

11
/*
12
 Globale Variablen
13
 */
14
extern unsigned char flankenwechsel2;
15
extern unsigned char keypad_uebergeben;
16

17
/*
18
 Funktionsprototypen
19
 */
20
char keypad_wert_einlesen(unsigned char warten);
21
void keypad_ini(void);
22

23
#endif /* keypad_h */

### Oder ###

1
#ifndef keypad_h
2
#define keypad_h
3

4
/*
5
 Hardwaredefinitionen
6
 (avr/io.h muss bereits includiert sein)
7
 */
8
#define keypad_port PORTC
9

10
#if (keypad_port == PORTC)
11
#define Taster PINC
12
#endif
13

14
#if (keypad_port == PORTA)
15
#define Taster PINA
16
#endif
17

18
#ifndef Taster
19
#error "Taster ist nicht definiert"
20
#endif
21

22
/*
23
 Globale Variablen
24
 */
25
extern unsigned char flankenwechsel2;
26
extern unsigned char keypad_uebergeben;
27

28
/*
29
 Funktionsprototypen
30
 */
31
char keypad_wert_einlesen(unsigned char warten);
32
void keypad_ini(void);
33

34
#endif /* keypad_h */

Wahrscheinlich hat du nur = und == verwechselt.
OP #2367562
Lesenswert?

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.
OP #2367678
Lesenswert?

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.
#2368381
Lesenswert?

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 :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren