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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.