Forum: Compiler & IDEs geht das in WINAVR nicht?


von IAR'ler (Gast)


Lesenswert?

Hallo Forumgemeinde,

geht das in WINAVR so nicht? (2. define)


#define DDR_SS      DDB4;
#define PIN_INIT_MASTER()   {DDR_SS = 1;}

…..

Void init_spi_mode(void)
{
PIN_INIT_MASTER();
…
}


Ich bekomme die Fehlermeldung:
Expected expression befor ‚=’ token

Danke für eure Hilfe.

Viele Grüße...

von Uwe .. (uwegw)


Lesenswert?

Nein, das geht so nicht.

von Gast (Gast)


Lesenswert?

Einfach selbst durchspielen und händisch ersetzen. Dann steht im Code 
das hier. Da sollte der Fehler direkt erkennbar sein.

Void init_spi_mode(void)
{
{DDB4; = 1;};
…
}

von IAR'ler (Gast)


Lesenswert?

In IAR geht das nun mal so...
Sorry für die Frage
DANKE

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

In der Art auch ohne ; nicht, der Compiler "sieht" 4=1. Wenn das bei 
EWAVR funktioniert, steckt wohl eine Compilererweiterung von IAR 
dahinter (wohl das "@", habe EWAVR nie selbst benutzt, aber einiges an 
Code dafür nach avr-gcc/avr-libc portiert). Das sollte mit IAR und GNU 
funktionieren: #define PIN_INIT_MASTER() DDRB|=(1<<DDB4)

von Gast (Gast)


Lesenswert?

Das glaub ich dir nicht. Der kann doch nicht einfach ein ; wegmachen.

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Falls mein Beitrag gemeint ist: glaube ich auch nicht, daher steht da ja 
"auch ohne". Mein Beitrag bezog sich nicht auf das ";", sondern auf die 
scheinbar beabsichtigte Funktionalität. IAR hat Compilererweiterungen 
zum "mappen" von Variablen/Bitfeldern auf Hardwareregister, die 
avr-gcc/avr-libc nicht haben. Kenne das etwas besser auch nur nur von 
EWARM und klinke mich daher betr. EWAVR hier aus, morgen wird ein 
ERAVR-Anwender wohl aus erster Hand etwas dazu schreiben.

von Peter D. (peda)


Lesenswert?

Es geht schon, man muß sich nur vorher ein Macro schreiben, mit dem man 
dann Bitvariablen definiert.
Hier ein Beispiel:

http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip

Bei AVRfreaks gibts dazu auch ein Tutorial:

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=67368&start=all&postdays=0&postorder=asc


Peter

von IAR'ler (Gast)


Lesenswert?

Nur mal zur Info damit man mal sieht wie das in IAR machen kann:

///////////////

#define OUTPUT 1

#define DDR_SS    DDRB_Bit4
#define DDR_MOSI  DDRB_Bit5
#define DDR_SCK   DDRB_Bit7

#define PIN_INIT_MASTER(){  DDR_SS    = OUTPUT;\
                            DDR_MOSI  = OUTPUT;\
                            DDR_SCK   = OUTPUT;}




// in der .c Datei dann...

void init_spi_master_mode(void)
{
  PIN_INIT_MASTER();
.....
}
///////////////


Habe mal bei IAR nachgeschaut. die ersten defines funktionieren über ein 
Macro. Wie das mir der "definefunktion" ist weiß ich auch nicht, egal!!
@Peter:
Danke für die Infos :o)

Viele Grüße...

von ... (Gast)


Lesenswert?

IAR'ler scheint blind zu sein xD

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.