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:
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".Code: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
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







Zitieren

Lesezeichen