Forum: Mikrocontroller und Digitale Elektronik #define problem


von Christian (Gast)


Lesenswert?

hi,

also ich beschäftige mich seit kurzem mit c programmierung und möchte 
daten über den spi-bus senden.

nun möchte ich z.b. statt:
spi_send(0x1B);  //Sendet 0x1B = ESC über den SPI-Bus

gleich

#define ESC 0x1B;
spi_senden(ESC);  //Sendet 0x1B = ESC über den SPI-Bus

schreiben.

dann sagt der keil compiler aber
1
compiling main.c... .\MAIN.C(41): 
2
error C141: syntax error near ';' .\MAIN.C(41): 
3
error C141: syntax error near ')' Target not created

was mache ich da falsch?

danke, christian

von Peter D. (peda)


Lesenswert?

Christian wrote:

>
1
> error C141: syntax error near ';' .\MAIN.C(41):
2
>

Recht hat er.
In einer Argumentenliste hat ein ; nichts verloren.

Peter

von Thomas (Gast)


Lesenswert?

#define ESC 0x1B
ohne Strichpunkt

sonst wird daraus:

#define ESC 0x1B;
spi_senden(0x1B;);  //Sendet 0x1B = ESC über den SPI-Bus

Das kannst du auch an den Fehlermeldungen erkennen.

Thomas

von Christian (Gast)


Lesenswert?

ihr habt recht ;)

herzlichen dank.

von Christian (Gast)


Lesenswert?

hi,

ein problem habe ich noch:

wenn ich meine ganzen #defines in eine header datei packe und sie 
include, funktionieren die #defines im main nicht mehr. (.\MAIN.C(60): 
error C202: 'A': undefined identifier Target not created )

define.h
1
#define ESC 0x1B
2
#define A  0x41
3
#define B  0x42
4
#define C  0x43
5
#define D  0x44
6
#define E  0x45
7
#define F  0x46
8
#define G  0x47
9
#define H  0x48
10
#define I  0x49
11
#define J  0x4A
12
#define K  0x4B
13
#define L  0x4C
14
#define M  0x4D
15
#define N  0x4E
16
#define O  0x4F
17
#define P  0x50
18
#define Q  0x51
19
#define R  0x52
20
#define S  0x53
21
#define T  0x54
22
#define U  0x55
23
#define V  0x56
24
#define W  0x57
25
#define X  0x58
26
#define Y  0x59
27
#define Z  0x5A

wenn ich aber stattdessen die #defines ins main kopiere, funktioniert 
alles reibungslos (include wurde gesetzt)

lg christian

von W. W. (dt_rocky)


Lesenswert?

Hallo Christian!


Also aus der c-Datei kopierst die defines in eine neue Datei die du 
meinetwegen define.h nennst. Diese define.h Datei fügst auch im Keil 
bzw. zu deinem Projekt (Add to Source Group). Und dann schreibst einfach 
in der c-Datei #include "define.h" und dann müsste es laufen.

MfG
W.W.

von Peter D. (peda)


Lesenswert?

Wer macht denn so blöde Defines, willst Du etwa ASCII neu erfinden?

In C schreibt man Strings
1
puts("Hallo");
oder einzelne Zeichen
1
putchar('H');


Peter

von W. W. (dt_rocky)


Lesenswert?

Peter Dannegger wrote:
> Wer macht denn so blöde Defines, willst Du etwa ASCII neu erfinden?

... das dacht ich mir auch

> In C schreibt man Strings
>
1
> puts("Hallo");
2
>
> oder einzelne Zeichen
>
1
> putchar('H');
2
>
>

Sei nicht so streng :-)

von Christian (Gast)


Lesenswert?

hi W.W.

ja das mach ich ja, nur es geht nicht.

also ich habe die datei define.h:
1
#define ESC 0x1B
2
3
#define A  0x41
4
#define B  0x42
5
#define C  0x43
6
#define D  0x44
7
#define E  0x45
8
#define F  0x46
9
#define G  0x47
10
#define H  0x48
11
#define I  0x49
12
#define J  0x4A
13
#define K  0x4B
14
#define L  0x4C
15
#define M  0x4D
16
#define N  0x4E
17
#define O  0x4F
18
#define P  0x50
19
#define Q  0x51
20
#define R  0x52
21
#define S  0x53
22
#define T  0x54
23
#define U  0x55
24
#define V  0x56
25
#define W  0x57
26
#define X  0x58
27
#define Y  0x59
28
#define Z  0x5A

und mein main (auszug):
1
//Includes
2
#include <ADuC831.h>
3
#include "define.h"
4
5
6
//Functions
7
void spi_senden(char spi_data);
8
void delay(unsigned int i);
9
void dis_clear();
10
void dis_rechteck();
11
void dis_button();
12
void dis_term_off();
13
14
spi_senden(ESC);  //esc
15
spi_senden(A);  //A
16
spi_senden(L);  //L
17
spi_senden(L);  //L
18
spi_senden(O);  //O

nun kommen meldungen, dass er a, l, l und o nicht kennt. komischerweise 
aber esc schon...

lg christian

von Simon K. (simon) Benutzerseite


Lesenswert?

Mach es, wie Peter es sagt.
1
spi_senden(0x1B);  //esc
2
spi_senden('A');  //A
3
spi_senden('L');  //L
4
spi_senden('L');  //L
5
spi_senden('O');  //O

von crazy horse (Gast)


Lesenswert?

Steuerzeichen nehme ich auch als define (esc, stx, etx), das macht Sinn, 
erhöht die Lesbarkeit bzw. erspart mir den Kommentar.

von W. W. (dt_rocky)


Lesenswert?

Hallo!

Ja mach es bitte so wie Peter bzw. Simon jetzt geschrieben haben/hat.
Warum machst du dir überhaupt solche defines wenn es die ASCII Zeichen 
schon gibt.

Und ist void spi_senden(char spi_data); dein Funktionsprototyp???

Man schreibt die Prototypen normlerweise auch in eine h-Datei z.b.

void spi_senden(char );

und in der c-Datei steht die Funktion

void spi_senden(char x)
{

blabla...
x = .......;

}

von Christian (Gast)


Lesenswert?

danke für eure tipps.

lg christian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.