Frage zu: #define, #undef und #include

Gast #2669953
Lesenswert?

Hallo,

ich bin gerade dabei den SMC (Static Memory Controller) für den AVR32 
einzubinden, der bereits fertig im ASF von Atmel angeboten wird.

Anhand des nachfolgenden Code Ausschnitts aus der header-Datei, wird der 
SMC für jeden externen Chip, bzw. dessen Chip_Select configuriert:
1
#ifndef SMC_COMPONENT_CS0
2
#ifndef SMC_COMPONENT_CS1
3
#ifndef SMC_COMPONENT_CS2
4
#ifndef SMC_COMPONENT_CS3
5
#ifndef SMC_COMPONENT_CS4
6
#ifndef SMC_COMPONENT_CS5
7

8
#warning SMC default configuration is missing.
9
//! SMC Peripheral Memory Size in log2(Bytes)
10
#define EXT_SM_SIZE            17
11

12
//! SMC Data Bus Width
13
#define SMC_DBW                16
14

15
//! Whether 8-bit SM chips are connected on the SMC
16
#define SMC_8_BIT_CHIPS        false
17

18
// NWE setup length = (128* NWE_SETUP[5] + NWE_SETUP[4:0])
19
//! Unit: ns.
20
#define NWE_SETUP                0
21

22
// NCS setup length = (128* NCS_WR_SETUP[5] + NCS_WR_SETUP[4:0])
23
//! Unit: ns.
24
#define NCS_WR_SETUP             0
25

26
// .....
27
// .....  viele, viele Einstellungen
28
// .....
29

30
#endif
31
#endif
32
#endif
33
#endif
34
#endif
35
#endif

Wie im nachfolgenden Ausschnitt werden diese Einstellungen dann genutzt, 
um den entsprechenden Code auszuführen.
1
//! Whether to use the NCS0 pin
2
#ifdef SMC_USE_NCS0
3
  #include SMC_COMPONENT_CS0       //  <----------  zu dem hier habe ich meine Frage
4

5
//...
6
//... Einstellung der Register
7
//...
8

9
  #undef EXT_SM_SIZE
10
  #undef SMC_DBW
11
  #undef SMC_8_BIT_CHIPS
12
  #undef NWE_SETUP
13
  #undef NCS_WR_SETUP
14
  #undef NRD_SETUP
15
  #undef NCS_RD_SETUP
16
  #undef NCS_WR_PULSE
17
  #undef NWE_PULSE
18
  #undef NCS_RD_PULSE
19
  #undef NRD_PULSE
20
  #undef NCS_WR_HOLD
21
  #undef NWE_HOLD
22
  #undef NWE_CYCLE
23
  #undef NCS_RD_HOLD
24
  #undef NRD_CYCLE
25
  #undef TDF_CYCLES
26
  #undef TDF_OPTIM
27
  #undef PAGE_MODE
28
  #undef PAGE_SIZE
29
  #undef NCS_CONTROLLED_READ
30
  #undef NCS_CONTROLLED_WRITE
31
  #undef NWAIT_MODE
32
#endif
33

34

35
//! Whether to use the NCS1 pin
36
#ifdef SMC_USE_NCS1
37
  #include SMC_COMPONENT_CS1       //  <----------  zu dem hier habe ich meine Frage
38

39
//...
40
//... das ganze noch mal für SMC_COMPONENT_CS1, SMC_COMPONENT_CS2, SMC_COMPONENT_CS3, SMC_COMPONENT_CS4 und SMC_COMPONENT_CS5
41
//...

Compiliere ich das ganze dann, erhalte ich die Fehlermeldung:
1
Error: #include expects "FILENAME" or <FILENAME>

Die Fehlermeldung kommt natürlich zu Recht, da die Zeile
1
  #include SMC_COMPONENT_CS1
das Einbinden einer Header-Datei verlangt. Lösche ich diese Zeile, läuft 
der Speicher wie gewollt.

Was ich hier nur nicht verstehe ist, wie das ganze eigentlich gedacht 
gewesen sein soll. Die vielen "#undef"-Befehle deuten ja schon darauf 
hin, dass die definierten Werte immer wieder neu eingebunden werden 
sollen.
Aber ich kann doch so nicht die ganzen #define-Zeilen (von der 
Header-Datei) per #include einbinden. Oder?
Moderator (Firma: Titel) Persönliche Seite #2670238
Lesenswert?

brechbunkt schrieb:
> Die Fehlermeldung kommt natürlich zu Recht, da die Zeile
>  #include SMC_COMPONENT_CS1
> das Einbinden einer Header-Datei verlangt.
Richtig. Und wenn da nirgends was steht wie
#define SMC_COMPONENT_CS1 <die_headerdatei.h>
oder
#define SMC_COMPONENT_CS1 "c:\meine_header\die_headerdatei.h"
dann könnte es sein, dass du dieses #define auf der 
Compiler-Kommandozeile erledigen kasnnt/sollst/musst. Sieh dir mal die 
originalen Makefiles an.

> Lösche ich diese Zeile, läuft der Speicher wie gewollt.
Ist doch toll. Dann lass es so...  ;-)

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