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