Forum: Compiler & IDEs Bitfelder


von Die Verzweifelten (Gast)


Lesenswert?

Hallo zusammen,

wir haben eine Frage zu Bitfeldern.
Aber zuerst mal zur Ausgangssituation:
Wir möchten 64 digitale Eingänge über Multiplexer einlesen. Das klappt
mit unserem Testprogramm ganz gut. Mittels einer Schleife lesen wir die
Bits in ein (unsigned char) Array ein, das über eine Laufvariable
weitergeschaltet wird.
Das Unschöne daran: Es werden 64 Byte für 64 Bit verschwendet :-(

Im Tutorial ist ja die Erstellung von Bitfeldern ausführlich
beschrieben. Doch der Zugriff darauf ist eben leider nicht so einfach
wie bei Arrays... Oder gibt es da auch ne Möglichkeit mittels Index
zuzugreifen?

Als eine Lösungsmöglichkeit ist uns eingefallen: Man könnte 8 Bit
einlesen (in 8 verschiedene Variable), und dann diese durch
Schiebeoperationen in einer 8-Bit-Variable unterbringen. Ist das
gängige Praxis?

Wäre nett, wenn uns jemand helfen könnte!
Grüße
Michael und Björn

von Peter D. (peda)


Lesenswert?

Ich vermute mal, Du liest die Bits nacheinander über einen Pin ein, dann
kannst Du sie auch dabei gleich einschieben:

1
unsigned long long mybits; // 64 Bit
2
3
...
4
mybits <<= 1; // um 1 schieben, 0 reinschieben
5
if( PINA & 1<<PA7 ) // Eingang ist Pin7 von Port A
6
  mybits |= 1; // Pin übernehmen.
7
...


Nochn Tip:
Das Einlesen geht über Schieberegister (74HC165) viel einfacher, als
über Multiplexer.


Peter

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Man kann das, aber wie immer: man handelt Speicherplatz gegen
Rechenzeit.  Der AVR kann nur um ein Bit pro Befehl schieben,
also hat man schlimmstenfalls 7 Schleifendurchläufe pro Byte,
bis man die passende Bitposition erst einmal hat.

Da du für nicht genutzten RAM von Atmel kein Geld zurück bekommst,
würde ich das erst dann machen, wenn klar ist, dass der RAM zu
knapp wird.

von Die Verzweifelten (Gast)


Lesenswert?

Ok, danke Peter.
Jetzt klappts. ;-)

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.