Bit eines Arrays

Lschreyer
Schreiberling
Avatar
Geschlecht: keine Angabe
Beiträge: 527
Dabei seit: 02 / 2007
Betreff:

Bit eines Arrays

 · 
Gepostet: 04.11.2018 - 15:48 Uhr  ·  #1
Bekanntlich kann man Variablen als Bit einer Zahl anlegen, so z.B.

Var
LED[@PortR, 1] : bit;
KEY1[@PortB, 1] : bit;

usw. Das macht den Code verständlicher.

Kann ich das auch mit einem Array machen?
Ich habe ein Array [1..8] of Byte.
Darin speichere ich Tastendrücke einer Tastenmatrix.
Nun hätte ich gerne "anfassbare" Tastennamen, also wollte ich so etwas wie

Var
Matrix: Array[1..8] of Byte; // 8 Bytes für jeden Matrixpunkt einen
KEY1[@Matrix[1], 1] : bit;
KEY2[@Matrix[1], 2] : bit;
usw.

Das geht aber leider nicht. Gibt es einen eleganten Weg so etwas hin zu bekommen?
rh
Administrator
Avatar
Geschlecht:
Herkunft: Germany
Alter: 25
Homepage: e-lab.de
Beiträge: 5558
Dabei seit: 03 / 2002
Betreff:

Re: Bit eines Arrays

 · 
Gepostet: 04.11.2018 - 16:20 Uhr  ·  #2
Hallo Louis,

nein, das geht nicht, denn die Adresse eines Bytes hat ja immer 16bit/2bytes.
Dazu kommt noch die Adresse des bits in diesem Byte, also ein weiteres Byte.
Macht zusammen 24bits. Das lässt sich so nicht darstellen.
Wenn man das array als ein array of bitsets definiert sollte es besser gehen.

rolf
Lschreyer
Schreiberling
Avatar
Geschlecht: keine Angabe
Beiträge: 527
Dabei seit: 02 / 2007
Betreff:

Re: Bit eines Arrays

 · 
Gepostet: 04.11.2018 - 17:46 Uhr  ·  #3
Mit Bitsets hatte ich schon überlegt, aber da kam ich nicht wirklich dahin wo ich hin wollte

Ich habe es jetzt so gelöst:

Var
Matrix: Array[1..8] of Byte;

KEYROW1[@Matrix]: Byte;
KEYROW2[@Matrix+1]: Byte;
KEYROW3[@Matrix+2]: Byte;
KEYROW4[@Matrix+3]: Byte;
KEYROW5[@Matrix+4]: Byte;
KEYROW6[@Matrix+5]: Byte;
KEYROW7[@Matrix+6]: Byte;
KEYROW8[@Matrix+7]: Byte;

// Taster der ersten Reihe
STARTKEY[@KEYROW1, 0] : bit;
STOPKEY[@KEYROW1, 1] : bit;

// Taster der zweiten Reihe
KEYLEFT[@KEYROW2, 0] : bit;
KEYUP[@KEYROW2, 4] : bit;
KEYRIGHT[@KEYROW2, 3] : bit;

So kann ich jede Zelle einzeln anhand des vergebenen Namens prüfen ohne wissen zu müssen in welcher Reihe sie liegt oder welchem Bitset sie angehört.
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 15 · Cache Hits: 14   66   80 · Page-Gen-Time: 0.055716s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI