stekohl
16.10.2008, 21:49
Hallo Leute,
noch ein Problem mit Bascom.
Ich nutze einen Atmege644 im DIP 40 Bauform mit einem EasyAVR4 Board von Mikroelektronika. (Board finde ich ok, der Pascalcompiler ist allerdings "etwas" verbugt)
Meine Anwendung soll später mal ein Midifußcontroller werden. Für alle Nichtmusiker, um per Fusstasten diverse Midieffekte und -geräte anzusteuern.
Ich habe per PC 200 Dateien mit dem Namen "bankxx.bnk" angelegt, 200 Unterverzeichnisse mit dem Namen "bankxx" und in jedem unterverzeichniss je 14 Dateien mit dem Namen "bxxpxx.bnk".
Nun habe ich Angefangen für die einzelnen Komponenten meines geplanten Projektes immer das angefangenen Programm zu erweitern.
Mit dem Atmega644 ist es ja Aufgrund des 4096Byte SRAM möglich mit SD-Karten und FAT zu arbeiten. Was auch klappt, es bleiben noch genug SRAM für eigene Variablen über.
Nun bin ich evtl. etwas meschuge oder verstehe Bascom ein wenig zu sehr als Q-Basic ;-). Ich habe jedoch immer wieder das Problem, dass dimensionierte Variablen einfach auf NULL gesetzt werden (anderer Thread).
Beispiel:
Do
Cls
Chdir "\"
Bankname = ""
Zaehler = 0
Infodat = ""
Waitms 10
Z = Rnd(199) 'Hier werden die Variablen zugeordnet
Waitms 23
X = Rnd(13)
Incr Z 'hiermit umgehe ich BANK0
Incr X 'hiermit umgehe ich PRESET0
Inii = "bank" + Str(z) + ".bnk"
Open Inii For Input As #1
Input #1 , Zaehler , Bankname
Close #1
If Z = 0 Then 'Hier will ich sehen ob Z noch einen Wert hat
Lcd Z ; " bank"
End
End If
Inii = "bank" + Str(z)
Chdir Inii
Inii = "b" + Str(z) + "p" + Str(x) + ".bnk"
Open Inii For Input As #1
Input #1 , Preset(1) , Midi1(1) , Midi2(1) , Pedal1(1);
Close #1
If Z = 0 Then ' Oder verliert hier die Variable ihren Wert
Lcd Z ; "preset"
End
End If
Lcd Z ; " " ; X ; " " ; Bankname ; " " ; Zaehler
Lowerline
Lcd Preset(1) ; " " ; Midi1(1)
Loop
Ich habe per PC 200 Dateien mit dem Namen "bankxx.bnk" angelegt, 200 Unterverzeichnisse mit dem Namen "bankxx" und in jedem unterverzeichniss je 14 Dateien mit dem Namen "bxxpxx.bnk".
Die Routine soll einfach per Random (Variable Z)eine der 200 Bankdateien öffnen und den Banknamen laden. Dann wird per chdir in das dazu passende Unterverzeichniss gewechselt. Danach per Random (Variable X) eine der 14 Presetdateien ausgelesen.
Ich will mit diesem Test einfach mal sehen wie hoch die Latenz ist. Später sollen dann die Presetdaten nicht mehr einzeln, sondern alle 14 in Arrays geschrieben werden.
Der Witz ist, dass die Variable Z schon nach dem ersten OPEN/CLOSE (laden der Bankdaten) manchmal nur noch Null enthält. Und das eben auch nicht immer!! Das weis ich daher, da ich mir ja deswegen extra diese IF Abfrage mit eingebaut habe.
Sage ich z=Rnd(50) läuft die Routine endlos durch.
Ich verstehe meinen Fehler irgendwie nicht. Warum werden die Variablen immer wieder auf NULL gesetzt?
Ach ja, wenn es läuft lädt Bascom->AVR-DOS->ATMEGA644(20MHZ) die daten ich unter 100ms. Garnicht so schlecht.
Gruß,
Stephan
noch ein Problem mit Bascom.
Ich nutze einen Atmege644 im DIP 40 Bauform mit einem EasyAVR4 Board von Mikroelektronika. (Board finde ich ok, der Pascalcompiler ist allerdings "etwas" verbugt)
Meine Anwendung soll später mal ein Midifußcontroller werden. Für alle Nichtmusiker, um per Fusstasten diverse Midieffekte und -geräte anzusteuern.
Ich habe per PC 200 Dateien mit dem Namen "bankxx.bnk" angelegt, 200 Unterverzeichnisse mit dem Namen "bankxx" und in jedem unterverzeichniss je 14 Dateien mit dem Namen "bxxpxx.bnk".
Nun habe ich Angefangen für die einzelnen Komponenten meines geplanten Projektes immer das angefangenen Programm zu erweitern.
Mit dem Atmega644 ist es ja Aufgrund des 4096Byte SRAM möglich mit SD-Karten und FAT zu arbeiten. Was auch klappt, es bleiben noch genug SRAM für eigene Variablen über.
Nun bin ich evtl. etwas meschuge oder verstehe Bascom ein wenig zu sehr als Q-Basic ;-). Ich habe jedoch immer wieder das Problem, dass dimensionierte Variablen einfach auf NULL gesetzt werden (anderer Thread).
Beispiel:
Do
Cls
Chdir "\"
Bankname = ""
Zaehler = 0
Infodat = ""
Waitms 10
Z = Rnd(199) 'Hier werden die Variablen zugeordnet
Waitms 23
X = Rnd(13)
Incr Z 'hiermit umgehe ich BANK0
Incr X 'hiermit umgehe ich PRESET0
Inii = "bank" + Str(z) + ".bnk"
Open Inii For Input As #1
Input #1 , Zaehler , Bankname
Close #1
If Z = 0 Then 'Hier will ich sehen ob Z noch einen Wert hat
Lcd Z ; " bank"
End
End If
Inii = "bank" + Str(z)
Chdir Inii
Inii = "b" + Str(z) + "p" + Str(x) + ".bnk"
Open Inii For Input As #1
Input #1 , Preset(1) , Midi1(1) , Midi2(1) , Pedal1(1);
Close #1
If Z = 0 Then ' Oder verliert hier die Variable ihren Wert
Lcd Z ; "preset"
End
End If
Lcd Z ; " " ; X ; " " ; Bankname ; " " ; Zaehler
Lowerline
Lcd Preset(1) ; " " ; Midi1(1)
Loop
Ich habe per PC 200 Dateien mit dem Namen "bankxx.bnk" angelegt, 200 Unterverzeichnisse mit dem Namen "bankxx" und in jedem unterverzeichniss je 14 Dateien mit dem Namen "bxxpxx.bnk".
Die Routine soll einfach per Random (Variable Z)eine der 200 Bankdateien öffnen und den Banknamen laden. Dann wird per chdir in das dazu passende Unterverzeichniss gewechselt. Danach per Random (Variable X) eine der 14 Presetdateien ausgelesen.
Ich will mit diesem Test einfach mal sehen wie hoch die Latenz ist. Später sollen dann die Presetdaten nicht mehr einzeln, sondern alle 14 in Arrays geschrieben werden.
Der Witz ist, dass die Variable Z schon nach dem ersten OPEN/CLOSE (laden der Bankdaten) manchmal nur noch Null enthält. Und das eben auch nicht immer!! Das weis ich daher, da ich mir ja deswegen extra diese IF Abfrage mit eingebaut habe.
Sage ich z=Rnd(50) läuft die Routine endlos durch.
Ich verstehe meinen Fehler irgendwie nicht. Warum werden die Variablen immer wieder auf NULL gesetzt?
Ach ja, wenn es läuft lädt Bascom->AVR-DOS->ATMEGA644(20MHZ) die daten ich unter 100ms. Garnicht so schlecht.
Gruß,
Stephan