www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik #define problem


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
compiling main.c... .\MAIN.C(41): 
error C141: syntax error near ';' .\MAIN.C(41): 
error C141: syntax error near ')' Target not created 

was mache ich da falsch?

danke, christian

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian wrote:

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

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

Peter

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ihr habt recht ;)

herzlichen dank.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
#define ESC 0x1B
#define A  0x41
#define B  0x42
#define C  0x43
#define D  0x44
#define E  0x45
#define F  0x46
#define G  0x47
#define H  0x48
#define I  0x49
#define J  0x4A
#define K  0x4B
#define L  0x4C
#define M  0x4D
#define N  0x4E
#define O  0x4F
#define P  0x50
#define Q  0x51
#define R  0x52
#define S  0x53
#define T  0x54
#define U  0x55
#define V  0x56
#define W  0x57
#define X  0x58
#define Y  0x59
#define Z  0x5A

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

lg christian

Autor: W. W. (dt_rocky)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

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

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


Peter

Autor: W. W. (dt_rocky)
Datum:

Bewertung
0 lesenswert
nicht 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
>
> puts("Hallo");
> 
> oder einzelne Zeichen
>
> putchar('H');
> 
>

Sei nicht so streng :-)

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi W.W.

ja das mach ich ja, nur es geht nicht.

also ich habe die datei define.h:
#define ESC 0x1B

#define A  0x41
#define B  0x42
#define C  0x43
#define D  0x44
#define E  0x45
#define F  0x46
#define G  0x47
#define H  0x48
#define I  0x49
#define J  0x4A
#define K  0x4B
#define L  0x4C
#define M  0x4D
#define N  0x4E
#define O  0x4F
#define P  0x50
#define Q  0x51
#define R  0x52
#define S  0x53
#define T  0x54
#define U  0x55
#define V  0x56
#define W  0x57
#define X  0x58
#define Y  0x59
#define Z  0x5A

und mein main (auszug):
//Includes
#include <ADuC831.h>
#include "define.h"


//Functions
void spi_senden(char spi_data);
void delay(unsigned int i);
void dis_clear();
void dis_rechteck();
void dis_button();
void dis_term_off();

spi_senden(ESC);  //esc
spi_senden(A);  //A
spi_senden(L);  //L
spi_senden(L);  //L
spi_senden(O);  //O

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

lg christian

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach es, wie Peter es sagt.
spi_senden(0x1B);  //esc
spi_senden('A');  //A
spi_senden('L');  //L
spi_senden('L');  //L
spi_senden('O');  //O

Autor: crazy horse (Gast)
Datum:

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

Autor: W. W. (dt_rocky)
Datum:

Bewertung
0 lesenswert
nicht 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 = .......;

}

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für eure tipps.

lg christian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.