Bit eines Arrays

Lschreyer
Schreiberling
Avatar
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Bit eines Arrays

 · 
Posted: 04.11.2018 - 15:48  ·  #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
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Bit eines Arrays

 · 
Posted: 04.11.2018 - 16:20  ·  #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
Gender: n/a
Posts: 527
Registered: 02 / 2007
Subject:

Re: Bit eines Arrays

 · 
Posted: 04.11.2018 - 17:46  ·  #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.
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 14 · Cache Hits: 14   66   80 · Page-Gen-Time: 0.022463s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI