PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit der avr-dos Get Befehl als array



sato
13.09.2007, 10:16
Hallo
Habe Probleme beim lesen von Arrays von der SD karte mit den AVR-DOS Get Befehl. Anbei ein kleinen code um es zu veranschaunlichen. Hat jemand Erfahrung oder schon ähnliches gehabt?
Was mache ich falsch bei den code?


'Diesen Code funktioniert NICHT
Dim Dados(80) As Word
Dim Pixel As Long
Dim Loop1 As Long
Dim Data_array(12) As Byte
Dim F9 as string * 12
Dim ff As Byte

F9 = "test.bin"
Ff = Freefile() ' file handle holen
Open F9 For Binary As #ff

For Loop1 = 1 To Pixel
Get #ff , Dados(1) , , 80 ''80 words von der SD Karte auf einmal einlesen

For J_b = 0 To 79
Data_array(2) = Dados(j_b) 'low byte von der word variable speichern
Shift Dados(j_b) , Right , 8
Data_array(1) = Dados(j_b) 'high byte von der word variable speichern
Print #1 , "data2 =" ; Hex(data_array(2))
Print #1 , "data1 =" ; Hex(data_array(1))
Next J_b
Next Loop1
close #ff
Print #1 , "ENDE "



'Diesen Code FUNKTIONIERT aber zu langsam dar jedes mal nur ein word variable von der SD Karte gelesen wird

Dim Dados As Word
Dim Pixel As Long
Dim Loop1 As Long
Dim Data_array(12) As Byte
Dim F9 as string * 12
Dim ff As Byte

F9 = "test.bin"
Ff = Freefile() 'file handle holen
Open F9 For Binary As #ff

For Loop1 = 1 To Pixel
Get #ff , Dados 'jedesmal ein word variable einlesen
Data_array(2) = Dados 'low byte von der word variable speichern
Shift Dados(j_b) , Right , 8
Data_array(1) = Dados 'high byte von der word variable speichern
Print #1 , "data2 =" ; Hex(data_array(2))
Print #1 , "data1 =" ; Hex(data_array(1))
Next Loop1
close #ff
Print #1 , "ENDE "

Bin dankbar für jede Hilfe

Mfg
Sato

for_ro
13.09.2007, 10:38
Hast du mal probiert, nur den Variablennamen im Get Befehl anzugeben, also anstatt Dados(1) nur Dados?
Steht so glaube ich in der Doku.

Gruß

Rolf

sato
13.09.2007, 18:10
Hallo For_ro

Nein, das muss schon dados(1) sein, bei dados allein wird der Fehler 261
"Array expected", beim compilieren gemeldet weil dim dados(80) as word als array gedimmt wurde

warum dados1) und nicht z.b dados(0) das weiss ich nicht, muss wahrscheinlich Herr Vogel fragen

Gruss
Sato

PicNick
13.09.2007, 19:44
Get #ff , Dados(1) , , 80
da werden lt. HELP nur 40 Words gelesen (Länge ist immer anzahl bytes)

Ich hab' noch nicht kapiert, was das Umschiften et. bewirken soll ?
Willst du die Words in Bytes zerlegen ? wieso ?

sato
13.09.2007, 23:36
Hallo PickNik

Ja brauche das word in bytes zerlegen weil ich einen display damit ansteuere und da muss ich jedemal ein byte haben, ich glaube es irgendwo gelesen zu haben das es mit overlay der variable geht aber
ich weiss es nicht mehr wo es gesehen habe. In Picbasic Pro kann man ganz einfach direkt das lowbyte und highbyte der word variable zugreifen in Bascom sehe ich im Momment die Methode mit den Shiften, eine schnelleren Methode musste es geben damit mehr Geschwindigkeit erreichen kann

Das mit den AVR-DOS Get #ff, dados(1) , , 80 lese ich nur 0000 unf FFFF
bis jetzt hat sich Josef Voegel dazu nicht gehäussert.

Gruss
Sato

PicNick
14.09.2007, 07:08
DIM wordtab(80) as word
DIM bytetab(160) as byte at wordtab overlay

bytetab(9) LOw wordtab(5)
bytetab(10) Hi wordtab(5)

PS Genaugenommen brauchst du aber das word-array ja garnicht, du kannst ja den GET auch direkt in die Bytetabelle machen. Dem Bascom ist das wurst

sato
15.09.2007, 01:03
hallo

Es funktioniert, es war ein falschen Gedanken Fehler von mir

Gruss

Sato