Bitfelder

Gast #412062
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
#412063
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
Moderator Persönliche Seite #412064
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.

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.