Ein Testprogramm

Die Implementierung der SerialEEPROM-Methoden ist nun abgeschlossen. Um sie einem Funktionstest zu unterziehen, wollen wir ein kleines Testprogramm schreiben. Dieses soll eine "I2C EEPROM command shell" über die serielle RS232-Schnittstelle implementieren. Mit einem PC nebst Terminalprogramm können dann simple Kommandos zum Lesen und Schreiben auf das serielle EEPROM abgesetzt werden.

Die "command shell" soll folgende Befehle unterstützen:

KommandoArgumentBeschreibung
aIntegerAdresse für nächste Operation setzen
wStringString auf das serielle EEPROM schreiben
rIntegerString der angegeben Länge vom seriellen EEPROM lesen
Tabelle 1: Befehle der command shell

Die Implementierung des Testprogramms kann komplett in der main-Methode der SerialEEPROM-Klasse vorgenommen werden. Zur Unterscheidung der Benutzerkommandos bedienen wir uns eines einfachen switch-case-Konstrukts. Die SerialEEPROM-Funktionsaufrufe sind im nachfolgend gelisteten Quelltext markiert.

124    /**
125     * Test code for the <code>SerialEEPROM</code> functions.
126     */
127    public static void main(String[] args) {
128      try{
129        RS232 rs=new RS232(19200);
130        rs.println("I2C EEprom command shell");
131        rs.println("a set address (decimal integer+CR)");
132        rs.print("w write a string to set ");
133        rs.println("address (String+CR)");
134        rs.print("r read a string from set ");
135        rs.println("address (decimal integer+CR)");
136        rs.println("turn off your local echo");
137        int addr=0;
138        SerialEEPROM epp=new SerialEEPROM(TYPE_C08,0);
139        for(;;){
140          try{
141            rs.write('>');
142            char c=rs.read();
143            rs.write(c); // echo
144            switch(c){
145              case 'a':
146                rs.println();
147                rs.print("new address: ");
148                String line=rs.readLine();
149                rs.println();
150                addr=Integer.parseInt(line);
151                rs.println("set address to: ".concat(
152                           String.valueOf(addr)));
153                break;
154              case 'w':
155                rs.println();
156                rs.print("data to store: ");
157                line=rs.readLine();
158                rs.println();
159                byte[] buf=line.getBytes();
160                epp.write(buf, 0, buf.length, addr);
161                rs.print("written ".concat(String.valueOf(buf.length)));
162                rs.println("bytes to address: ".concat(
163                           String.valueOf(addr)));
164                break;
165              case 'r':
166                rs.println();
167                rs.print("amount of bytes to read: ");
168                line=rs.readLine();
169                rs.println();
170                buf=new byte[Integer.parseInt(line)];
171                epp.read(buf, 0, buf.length, addr);
172                rs.print("read string \"".concat(new String(buf)));
173                rs.println("\" from address: ".concat(
174                           String.valueOf(addr)));
175                break;
176              }
177          } catch(IOException e){
178            rs.println("IOException");
179          }
180        }
181      } catch(IOException e){}
182    }
Listing 4: Auszug aus SerialEEPROM.java

Zum Testen verbinden Sie ein serielles EEPROM mit Ihrem JControl-Gerät, laden Sie nun das komplette I2CExample als ZIP-Datei herunter und packen Sie diese in ein leeres Verzeichnis aus. Öffnen Sie das enthaltene JControl/IDE-Projekt und programmieren Sie Ihr JControl-Gerät damit. ACHTUNG: Achten Sie darauf, dass das SerialEEPROM-Objekt mit den korrekten Daten (Typ, Addresse) initialisiert wird!

Über das intergrierte RS232-Terminalprogamm (ab JControl/IDE Version 3.0.1) können Sie nun mit Ihrem JControl-Gerät kommunizieren und auf das serielle EEPROM zugreifen. Alternativ können sie ein Terminalprogramm starten (unter Windows beispielsweise HyperTerminal) und konfigurieren Sie die serielle Schnittstelle auf 19200 Baud, 8 Datenbit, keine Parity, 1 Stoppbit und keine Flusskontrolle. Eine Sitzung mit der "I2C EEPROM command shell" könnte wie folgt aussehen:

Beispielsitzung des EEPROM-Testprogramms