Bit in Ausgaberegister als Variable definieren

OP #6439889
Lesenswert?
• ▲
▼
Hallo zusammen,

es würde mich freuen, wenn mir jemand bei folgender Sache helfen könnte:

Ich würde gerne die Bits an einem Ausgabeport mit einer Variable 
ansteuern. Was ich damit meine ist Folgendes:
So sieht es ja normalerweise aus, wenn ich einen Pin high setze:
PORTC |=  _BV(PC4);

Nun würde ich gerne das bit durch eine Variable ersetzen:

if (irgendwas) gate =PC4;
if (was anderes) gate =PC5;
PORTC |=  _BV(gate);
...

Wie mache ich das am einfachsten? Mit #define mitten im Code geht es 
nicht, zumindest wüsste ich nicht wie.

Danke im Voraus und einen schönen Tag

Nicola
Gast #6440391
Lesenswert?
• ▲
▼
Sowas geht, aber nicht besonders portabel. Die Lösung versteckt sich bei 
Structs. Deren Mitglieder können bis auf 1 Bit geschrumpft werden. 
Problem ist, der Compiler läßt sich nicht vorschreiben, in welcher 
Reihenfolge mit wieviel Abstand dazwischen er die Mitglieder eines 
Structs im Speicher aufbewahrt. Bei den PICs (und auch anderen) gab's 
schon solche Structs in den mitgelieferten .h - Dateien. Da hieß dann 
eine solche "Variable" z.B.
1
PORTBbits.PB4
 .
Die kann man dann per Define auf einen möglichst unsinnigen Namen mappen 
:
1
#define irgendwasgate (PINCbits.PINC4)
Gast #6440642
Lesenswert?
• ▲
▼
fop schrieb:
> Problem ist, der Compiler läßt sich nicht vorschreiben, in welcher
> Reihenfolge mit wieviel Abstand dazwischen er die Mitglieder eines
> Structs im Speicher aufbewahrt.

Das ist dann aber ein komischer Compiler. Dürfte im embedded-Bereich 
eher selten sein.
Gast #6442317
Lesenswert?
• ▲
▼
A. S. schrieb:
> Das ist dann aber ein komischer Compiler. Dürfte im embedded-Bereich
> eher selten sein.

Ich schrieb von portabel. Da ist dann meist mehr als ein Compiler im 
Spiel. Ja, meist läßt sich das Padding einstellen, aber fast immer 
irgendwie anders. Die Reihenfolge der Bits ist dagegen oft nicht 
einstellbar. Man muss also die Reihenfolge im Code anpassen.
Und wenn man es einstellen kann, bindet man anderer Leute Header ein, 
die auch auf ihre Reihenfolge bestehen.

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.