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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.