PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Denkblockade -> Restore data(variable)



Andree-HB
19.05.2009, 12:37
Irgendwie hakt`s gerade an was ganz banalen bei mir - kann ich nicht einfach sinnbildliche Zeilen benutzen, um per variable mehrere tabellen anzusprechen ?`




dim x as byte , y as byte
x=5

do
restore dta(x)
Read y
print y
loop
end


Dta5:
Data 0 , 62 , 81 , 73 , 69 , 62 , 0 , 0

Dta6:
Data 0 , 62 , 81 , 55 , 23 , 62 , 0 , 0



- sagt mir dann immer nur "label not found" -

..."restore dta5" funktioniert einwandfrei....aus der Bascom-Hilfe werde ich diesbezüglich gerade nicht schlau...hat Jemand ein Tipp für mich ?

Che Guevara
19.05.2009, 13:26
Hallo Andree-HB,

wenn ich das richtig verstehe möchtest du eine Data-Zeile auslesen, X bestimmt dabei, welchen Datensatz (dta5 oder dt6) du auslesen möchtest?!
wenn es nur zwei Datensätze gibt, kannst du das ja mit einer If-Abfrage lösen:



if x = 5 then
restore dta5
read y
print y
elseif x = 6 then
restore dta6
read y
print y
endif


Allerdings ergibt sich hier ein problem:
Y braucht auch noch einen vordefinierten Wert, ansonsten kennt sich der µC nicht aus! (oder hab ich da was nicht verstanden??)
Vielleicht könntest du mal deinen gesamten code posten und erklären, was du damit machen willst?! das wäre viel einfacher für uns alle... soweit ich weiß hat keiner hier im forum ne glaskugel ;-)

Gruß
Chris

PicNick
19.05.2009, 15:47
"x" kriegt ja erst zur Laufzeit einen Wert, für "RESTORE" (oder auch JUMP oder CALL) muss aber schon der Compiler den konkreten Label-Namen wissen.
Bei MACRO-Statements könnten das einige Compiler in deinem Sinne, aber Bascom gehört da nicht dazu.

Je nachdem, was du machen möchtest :
EDIT: Du müsstest eine Tabelle von deinen Labeln machen und in der kannst du mit Lookup() dann so wie in deinem LOOP arbeiten



$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

Dim Tabaddr As Word
Dim X As Byte

Dim Xxx As Byte

For X = 0 To 4
Tabaddr = Lookup(x , Lookup_tab)
Xxx = Cpeek(tabaddr)
Print Xxx
Next

End

Lookup_tab:
Adr2 Dta1
Adr2 Dta2
Adr2 Dta3
Adr2 Dta4
Adr2 Dta5

Dta1:
Data 1
Dta2:
Data 2
Dta3:
Data 3
Dta4:
Data 4
Dta5:
Data 5

Andree-HB
19.05.2009, 17:57
...danke Robert, soetwas Ähnliches habe ich mir schon gedacht...ich werde Deinem Tipp mal folgen und so weitermachen.

thx

PicNick
19.05.2009, 18:45
Noch'n Tip: "RESTORE" lädt ja nur register 8, 9 mit der (flash) adresse des Label.
Du bist ja eh ein abgefeimter progger, d.h. mit ein wenig inline-assembler kannst du das nachvollziehen.
Vorteil: danach gehen die ganz normalen "READ"-Befehle und man braucht nicht mehr solche Schweinereinen wie "CPEEK"