PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Overlay in ein Array legen



gott18
09.08.2005, 15:17
Hallo,

ich habe eine Word-Variable und habe für diese zwei Bytevariablen per Overlay definiert um auf das High- und Lowbyte zugreifen zu können:

Dim TEST As Word At &H0100
Dim TEST_1 As Byte At &H0100 Overlay
Dim TEST_2 As Byte At &H0101 Overlay

Nun habe ich auch ein Array:
Dim Testarray(20) As Byte

Meine Frage ist nun, kann ich die beiden Overlays auf zwei Variablen des Array legen? Am liebsten wäre es mir, wenn ich BASCOM direkt in der Overlayzeile sagen könnte, dass die beiden Bytes von TEST zwei Variablen im Testarray sein sollen. Ist sowas möglich?

Danke,

Thomas

PicNick
09.08.2005, 16:05
So elegant geht das nicht, denk ich. du könntest aber zwei verscheidene arrays übereinanderlegen

Dim Bytearray(20) as byte
Dim Wordarray(10) as word at Bytearray overlay

das braucht keinen extraplatz und sollte auch reichen.

09.08.2005, 18:13
Ich habe nun mal diesen Code verwendet:
Dim Wordarray(10) As Word At Konfigregister Overlay
Error Alias Wordarray(0)

Und bekomme bei folgennden Zeilen die Meldung
"array index out of range"...was passt Bascom denn nicht?!?!

Error = 0
Error.0 = 1

bertl100
09.08.2005, 20:50
Vielleicht der Speicherbereich??

Welchen Controller verwendest du?
Die Adressen für RAM etc. unterscheiden sich untereinander.
Besser wäre die Angabe des Speicherbereiches in HEX.


MFG

Vader

09.08.2005, 21:08
Ich verwende einen ATMega162...der Speicherbereich sollte doch aber automatisch richtig vergeben werden wenn ich nichts angebe, oder?

bertl100
09.08.2005, 22:26
Ohne Angabe eigentlich schon.

Die Fehlermeldung erinnert mich an mein HTL Projekt.
Bei der Angabe der Speicheradresse habe ich den Falschen gewählt, und bekam genau diese Fehlermeldung.
Probiers einfach mit direkter Adressierung.

Wieso hast du "Error Alias Wordarray(0)" mit 0 deklariert????
Das ergibt keinen Sinn.

MFg

Vader

PicNick
10.08.2005, 07:27
Wie auch immer, Index 0 is nix für Bacom, der fängt mit 1 an.

10.08.2005, 10:16
Wie? Der Bascom fängt bei Arrays mit 1 an? Jede andere Programmiersprache fängt bei Arrays doch mit 0 an.
Wenn man ein Array mit 10 Einträgen hat, so laufen die normalerweise doch von 0 bis 9.

10.08.2005, 10:27
Hmm, scheint bei Bascom wohl echt anders zu sein...aus der hilfe:

'create an array named a, with 10 elements (1 to 10)
Dim A(10) As Byte
'create an integer
Dim C As Integer
'now fill the array
For C = 1 To 10
'assign array element
A(c) = C
' print it
Print A(c)
Next

10.08.2005, 11:09
Ich habe nun mal folgendes versucht:

Dim Konfigregister(20) As Byte

Dim Error As Word At Konfigregister Overlay
Dim Error1 As Byte At Konfigregister Overlay 'Lowbyte
Dim Error2 As Byte At Konfigregister + 1 Overlay 'Highbyte

So müsste es ja gehen, dass ich ein Array habe und die Werte im Array einmal als Word und das Low- und Highbyte jedes Words auch als Byte ansprechen kann. Nun nur noch eine Frage dazu...stimmt die Reihenfolge mit Low- und Highbyte so wie gepostet? Oder müsste das rumgedreht werden?

Danke,

Thomas

PicNick
10.08.2005, 12:11
Ist richtig, Intelformat = LowSigByte first.
Ich bin nicht sicher, ob Bascom overlay-addressen mit offset nimmt. Wenn nicht, drehst du es einfach um:


Dim Error1 As Byte 'Lowbyte
Dim Error2 As Byte 'Highbyte
Dim Error As Word At error1 Overlay
Dim Konfigregister(20) As Byte at error1 overlay