Forum: Mikrocontroller und Digitale Elektronik makro im makro bei cce 4 msp430


von Florian K. (kromerf)


Lesenswert?

hallo zusammen,
ich habe 3 makros innerhalb einer headerdatei (spi.h) definiert. diese 
macros sind geschachtelt bzw. rufen sich gegeneitig auf. sie werden von 
einem c-file aufgerufen (rf.c) nach folgendem schema. in den 
kommentierten zeilen erscheinen dann einige fehler. ich  benutze den 
code composer. der code wurdeaus einem anderen projekt übernommen. in 
diesem wurde ein anderer compiler eingesetzt. (vermutlich mspgcc?)

die makros befinden sich innerhalb von spi.h:
////////////////////////////////////////////
#ifndef SPI_H_
#define SPI_H_

#include "msp430x22x4.h"

#define  SPI_WAITFOREOTx()     while ((IFG2 & UCA0TXIFG) == 0)

#define FASTSPI_TX_ADDR(a)    \
   do {        \
      UCA0TXBUF = a;  \
      SPI_WAITFOREOTx();  \
   } while (0)

#define FASTSPI_STROBE(s)    \
    do {        \
      P3OUT &= ~0x02;  \
      FASTSPI_TX_ADDR(s);  \  FEHLER 1
      P3OUT |= 0x02;  \  FEHLER 2
    } while (0)

#endif /*SPI_H_*/
///////////////////////////////////////////

in rf.c wird FASTSPI_STROBE(s) aufgerufen:
////////////////////////////////////////////
#include "spi.h"

#define   CC2420_SXOSCON     0x01

FASTSPI_STROBE(CC2420_SXOSCON);
///////////////////////////////////////

FEHLER 1:
- expected a declaration

FEHLER 2:
- this declaration has no storage class or type specifier
- expected a ";"
- unrecognized token
- declaration is incompatible with "volatile unsigned char P3OUT" 
(declared at line 478 of "C:/Programme/Texas 
Instruments/ccsv4/msp430/include/msp430x22x4.h")
- expected a declaration

ich freue mich über antworten...

von g457 (Gast)


Lesenswert?

..wenn man den kaputten Quellcode repariert (Blöcke ausserhalb von 
Funktionen, fehlende Header, undefinierte Identifier, ..) dann 
compilierts einwandfrei, ergo liegt der Fehler bei Dir woanders. Liefer 
mal den kompletten(!) Quellcode in compilierbarer Form (oder speck ihn 
so weit ab dass er noch compilierbar ist und der selbe Fehler trotzdem 
noch auftritt und liefer dann das vollständig und compilierbar).

HTH und nix für ungut

von Florian K. (kromerf)


Lesenswert?

g457 schrieb:
> ..wenn man den kaputten Quellcode repariert (Blöcke ausserhalb von
> Funktionen, fehlende Header, undefinierte Identifier, ..)

hier handelt es sich nur um macros, nicht um funktionen. was meinst du 
mit blöcken außerhalb von funktionen? der header "msp430x22x4.h" bindet 
die msp-spezifischen define-bezeichnungen ein. die "parameter" a und s 
der macros sind nur platzhalter. oder beziehst du dich auf den rest des 
codes, den ich nicht gepostet habe?

g457 schrieb:
> dann
> compilierts einwandfrei, ergo liegt der Fehler bei Dir woanders.

wenn man nur diesen code-ausschnitt compiliert ist alles ok? makros 
innerhalb von makros aufrufen ist also möglich (auch mit parametern).

von g457 (Gast)


Lesenswert?

> was meinst du mit blöcken außerhalb von funktionen?

> FASTSPI_STROBE(CC2420_SXOSCON);

..expandiert ausserhalb jeglicher Funktion zu einem Block, das 
funtioniert nicht.

> makros innerhalb von makros aufrufen ist also möglich

Selbstverständlich. Würde mich schwer wundern wenn Dein Compiler das 
nicht unterstützt.

HTH

von Florian K. (kromerf)


Angehängte Dateien:

Lesenswert?

vielen dank für deine antwort. ich nehme den code schritt für schritt 
auseinander um zu schauen, wo der fehler liegt. hier ein code der sich 
fehlerfrei compilieren lässt...

von Florian K. (kromerf)


Angehängte Dateien:

Lesenswert?

macros in interrupt service routinen sind wie zu erwarten auch 
unproblematisch. allerdings scheinen die variablen vor der 
main()-funktion deklariert werden zu müssen. in meiner code-vorlage 
werden die variablen innerhalb der isr deklariert. diese variante konnte 
ich nicht fehlerfrei compilieren. gibt es diesbezüglich unterschiede bei 
verschiedenen compilern?

von Florian K. (kromerf)


Angehängte Dateien:

Lesenswert?

den in diesem code kommentierten fehler konnte ich nicht auf die 
schnelle beheben. bei zeigern bin ich leider noch nicht intuitiv genug 
;)

WICHTIG: die kommentare in macro.h innerhalb der macrodefinitionen 
unbedingt vor dem compilieren entfernen. sonst gibts massig 
fehlermeldungen.

von g457 (Gast)


Lesenswert?

> for (spiCnt = 0; spiCnt < (c); spiCnt++) {\
                                           ^
>        FASTSPI_RX(((unsigned char*)(p))[spiCnt]);\    // hier fehler?

..da oben ist eine überzählige Klammer.

von Florian K. (kromerf)


Lesenswert?

vielen dank. leider behebt die korrektur aber nicht das problem. ich 
erhalte beim kompilieren immer noch die selbe fehlermeldung. es bringt 
auch nichts die deklaration von spiCnt innerhalb von 
FASTSPI_READ_FIFO_NO_WAIT vor den do-block zu platzieren... die 
fehlermeldung scheint sich auf die zeiger-deklaration innerhalb des 
macros zu beziehen.

von Florian K. (kromerf)


Lesenswert?

der code composer erlaubt keine castings (die vermeintlichen zeiger) und 
variablendeklarationen innerhalb von macro-blöcken. der mspgcc 
unterstützt beides.

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.