mehrer bits in #define

Gast #4119736
Lesenswert?

Hi,
wie kann ich mehrere bits in einem define zuordnen?
Also ich möchte gerne bestimmte einstellungen für verschiedene benutzer 
zuordnen. Dazu möchte ich verschiedene Bits in verschiednene Register 
zuordnen und dann mit HEX werten beschreiben (das ganze mit einem 
dsPIC30F in c)
z.B.
1
#define PRIO C1TX0SIDbits.SID10_6
damit kann ihc nun schreiben
1
PRIO = 0x05;
wie kann ich denn mehrere bits definieren? ist so etwas überhaupt 
möglich?

Johannes
Gast #4119798
Lesenswert?

ich glaube, es ist falsch verstanden worden.
ich möchte z.B. der variable PRIO
C1TX0SIDbits.SID10_6 und C1TX0SIDbits.SID5
zuweisen. Wie schreibe ich das denn?
1
#define PRIO C1TX0SIDbits.SID10_6 C1TX0SIDbits.SID5
das ergibt einen error.
zusammengesetzt geht auch nciht, mit komma geht auch nicht
Gast #4119804
Lesenswert?

ja, das mit den bitfeldern wollte ich auch zuerst machen. Aber da hapert 
es, da ich nur bits vom selben Register beschreiben kann und ich auch 
zwei mal welche brauche, die bits von verschiednene Register benötigen.

Johannes
#4119806
Lesenswert?

Johannes schrieb:
> #define PRIO C1TX0SIDbits.SID10_6 C1TX0SIDbits.SID5
> das ergibt einen error.

Das #define ist so noch nicht fehlerhaft. PRIO wird vom Präprozessor zu 
"C1TX0SIDbits.SID10_6 C1TX0SIDbits.SID5" im Quelltext ersetzt, was dann 
zu Compilerfehlern führt.

Vielleicht kannst du das was du vor hast mit einem Makro lösen, nach dem 
Muster:
#define PRIO(parameter1, parameter2) ersatztext
Gast #4119991
Lesenswert?

ah, mit + hatte ich es auch versucht und mit () auch. aber beides 
zusammen hatte ich nicht porbiert. So funktioniert es.
Andere frage, wäre es denn möglich, ein Bitfeld zu erstellen, welches 
sich über zwei Register zieht? das wäre nämlich für mich eine schönere 
Variante.
schon einmal Dankeschön
Gast #4120268
Lesenswert?

Johannes schrieb:
> ich glaube, es ist falsch verstanden worden.
> ich möchte z.B. der variable PRIO
> C1TX0SIDbits.SID10_6 und C1TX0SIDbits.SID5
> zuweisen. Wie schreibe ich das denn?
> #define PRIO C1TX0SIDbits.SID10_6 C1TX0SIDbits.SID5
> das ergibt einen error.

Es wurde doch oben schon erwähnt: #define macht nichts weiter als eine 
ganz einfache Textersetzung. Überall, wo du PRIO hinschreibst, wird 
der Präprozessor das einsetzen, was in der define-Zeile rechts davon 
steht, sonst nichts.

Wenn du also schreibst:
1
#define PRIO C1TX0SIDbits.SID10_6 C1TX0SIDbits.SID5
und dann irgendwo:
1
PRIO = 0x05;

dann hättest du an der zweiten Stelle einfach stattdessen auch schreiben 
können:
1
C1TX0SIDbits.SID10_6 C1TX0SIDbits.SID5 = 0x05;

Warum das nicht geht, sollte klar sein.
Gast #4120271
Lesenswert?

Johannes schrieb:
> ah, mit + hatte ich es auch versucht und mit () auch. aber beides
> zusammen hatte ich nicht porbiert. So funktioniert es.

Ich sehe eigentlich nicht, wie das funktionieren soll, denn dann würde 
die obige Zeile mit der Zuweisung vom Präprozessor ersetzt durch:
1
(C1TX0SIDbits.SID10_6+C1TX0SIDbits.SID5) = 0x05;
was noch weniger Sinn ergibt, da das Ergebnis einer Addition nicht links 
von einer Zuweisung stehen darf.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren