Daten in den Speicher schreiben

Um Daten in den Speicher zu schreiben, werden zunächst dessen Dimensionen benötigt. Nun ist es notwendig etwas über die Methoden herauszufinden, die die JControl-API für den Zugriff auf den Flash-Speicher bereitstellt. Die folgenden Klassen beinhalten entsprechende Methoden:

  •  jcontrol.io.Flash
  •  jcontrol.storage.FlashStream
  •  jcontrol.storage.FlashTlv

Als Beispiel wird hier die Klasse jcontrol.io.Flash betrachtet. Um mit ihr überhaupt auf den Speicher zugreifen zu können, muss eine Instanz dieser Klasse (mit new) erzeugt werden. Dem Konstruktor (Flash()) kann dabei die Speicherbank (als int) übergeben werden, auf die bei Speicheroperationen zugegriffen werden soll (Flash(speicherbank)). Mit der Flash-Instanz und den Speicherdimensionen ist nun alles vorhanden, was der Anwender braucht, um Daten zu speichern.

Für das Schreiben von Daten wird hier die Methode write der Klasse jcontrol.io.Flash verwendet, welche 4 Paramter verlangt:

  •  Die zu schreibenden Daten (data) als Byte-Array (byte[]).
  •  Den Startindex (vom Typ int), ab dem die Daten aus dem Byte-Array (data) herausgelesen und in den Speicher übertragen werden sollen. (ACHTUNG: Erstes Byte hat den Index 0!)
  •  Die Anzahl zu schreibender Bytes (length) vom Typ int; Es werden dann die Bytes von startindex bis (startindex+length-1) aus dem angegebenen Byte-Array in den Speicher geschrieben.
  •  Der Zielsektor (sector vom Typ int), in den geschrieben werden soll.

Tipp: Die Klasse jcontrol.io.Flash verfügt außerdem über die Methode getUsableSectors(), die dem Benutzer anzeigt, wie viele Sektoren ihm für eigene Daten zur Verfügung stehen. Das ist besonders dann nützlich, wenn die zu beschreibende Speicherbank dieselbe ist, die das auszuführende Programm beherbergt. Es ist nicht in die Sektoren zu schreiben, die das Programm beinhalten.

Das folgende Beispielprogramm schreibt den String "Welcome to JControl!!!" an den Anfang des 0ten Sektors von Bank 0.

1    /**
2     * Java file created by JControl/IDE
3     *
4     * @author RSt
5     * @date 04.11.04 14:34
6     *
7     */
8    import java.io.IOException;
9    import jcontrol.io.Flash;
10    
11    public class FlashWrite {
12    
13        private static Flash myFlash;
14    
15        public FlashWrite() {
16            try{
17                //Initiate Flash object with context to bank 0
18                myFlash = new Flash(0);
19            }catch(IOException e){
20            }
21        }
22       
23        public static void main(String[] args) {
24            new FlashWrite();
25            String writeThis = "Welcome to JControl!!!";
26            byte[] data = writeThis.getBytes();
27            try{
28                //write data to memory:
29                myFlash.write(data, 0, data.length, 0);
30            }catch(IOException e){
31            }
32            for(;;);//Stops execution of this program.
33        }
34    }
Listing 2: FlashWrite.java

Ob die Daten korrekt geschrieben wurden, lässt sich bei diesem Programm nur mit dem Simulator der JControl/IDE überprüfen. Der Inhalt des entsprechenden Sektors kann in dessen Flash Viewer (Bild 1) sichtbar gemacht werden. Im folgenden Abschnitt (Daten aus dem Speicher lesen) wird das Beispielprogramm so erweitert werden, dass die geschriebenen Daten wieder eingelesen und auf der seriellen Schnittstelle ausgegeben werden.

Bild 1: Inhalt des Flash-Speichers (Bank 0, Sektor 0)

Die oben erwähnten Klassen jcontrol.storage.FlashStream und jcontrol.storage.FlashTlv basieren auf der hier benutzten Klasse jcontrol.io.Flash und implementieren einige hilfreiche Funktionen. So ermöglicht die Klasse FlashStream z.B. das kontinuierliche Schreiben, bzw. Lesen einzelner Zeichen (char), wohingegen die Klasse FlashTlv spezielle Dateien erzeugt.