Forum: Compiler & IDEs winavr codefragment für port-io


von Uwe Seidel (Gast)


Lesenswert?

Hi Leute,

also ich werd jetzt so langsam warm mit winavr.
aber da sind ein paar sachen, die ich nicht verstehe:
warum geht
1. DDRB = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_SS);
2. PORTB = (inp(PINB)|0x10);
nicht.
Der erste Fall ist aus dem Datenblatt von Atmel, wobei ich die
#define-Geschichte schon gemacht hab.
den zweiten Fall hätte ich gern so oder so ähnlich.

Kann mir mal jemand einen bitte einen Tip geben.

Uwe

von Joerg Wunsch (Gast)


Lesenswert?

Davon abgesehen, daß der inp()-Makro in der zweiten Zeile überflüssig
ist, was genau geht denn nicht?  Schau Dir auch mal den generierten
Assemblercode (avr-gcc -S) an.

von Uwe Seidel (Gast)


Lesenswert?

OH, sorry hab mich falsch ausgedrückt.
zu 1.
der compiler meldet schon:
1_main.c:30: error: parse error before ';' token

zu 2. nochmal sorry,
das funktioniert jetzt, warum auch immer es vorher nicht ging.
*Vielleicht sollte ich nachts nicht zu lange machen.*

Danke Dir aber schon mal .

von Uwe Seidel (Gast)


Lesenswert?

OK , ich bins nochmal....
ist mir ja echt peinlich, hab aber den Fehler gefunden:

Ganz doof ist es nämlich, wenn man die #define DD_MOSI 5
mit einem ";" abschließt.

Anscheinend ist das aus "Reflex" am Zeilenende passiert. Ist bestimmt

ein Firmware-Fehler in meiner Fingersteuerung-->arbeite am Upgrade.

:-)
Danke für die Hilfe
Uwe Seidel

von Joerg Wunsch (Gast)


Lesenswert?

> der compiler meldet schon:
> 1_main.c:30: error: parse error before ';' token

Hmm, dann hast Du irgendwas mit Deinen #defines versaut.

Ich sehe mir in solchen Fällen immer den Output des Präprozessors an.
Aufruf

avr-gcc -E <alle -D oder -I optionen, die man braucht> filename.c

Ausgabe nach »more« oder »less« pipen oder in eine Datei umlenken und
diese dann ansehen.

Auch wenn 2. jetzt tut: das inp() ist überflüssig.

von Uwe Seidel (Gast)


Lesenswert?

Jo , hab bei 2. das inp() rausgenommen.

Allerdings ist mir das mit :
> avr-gcc -E <alle -D oder -I optionen, die man braucht> filename.c

noch nicht so geläufig. hab mir bis jetzt einfach ein makefile
umgeschrieben, und in winavr/pn make aufgerufen. läuft.

Interessant wäre eine Sammlung der avr-gcc-optionen schon. Grad für
solche Art von debugging. Wo steht das denn drin?

Hab bis vorgestern eigentlich ausschließlich asm in AVR-Studio gemacht.
C kann ich von früher noch ein wenig. Aber die Compiler-Spezialitäten
bezüglich AVR sind mir NOCH ein Rätsel.

Uwe Seidel

von Joerg Wunsch (Gast)


Lesenswert?

> Allerdings ist mir das mit :
> > avr-gcc -E <alle -D oder -I optionen, die man braucht> filename.c

> noch nicht so geläufig.

Nun, im einfachsten Falle suchst Du Dir aus dem Log alle -D, -I (und
-U :-) Optionen raus, die Dein Projekt normalerweise benutzt (das sind
all die Optionen, die den Präprozessor beeinflussen).  Vermutlich sind
es keine. ;-)

> Interessant wäre eine Sammlung der avr-gcc-optionen schon. Grad für
> solche Art von debugging. Wo steht das denn drin?

Im GCC-Manual, wird von WinAVR mit auf Deiner Platte installiert.

Wichtige Optionen finden sich auch unter ``Using the GNU Tools'' im
avr-libc Manual, ebenfalls auf Deiner Platte. ;-)

von Uwe Seidel (Gast)


Lesenswert?

HUCH

ich sag jetzt nicht, dass ich das .pdf die ganze Zeit offen hatte und
nach Lösungen gesucht hab. ;-)

Ich denke, da hab ich ne Weile zu lesen.....

Danke für Deine Hilfe

Uwe Seidel

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.