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:
| Kommando | Argument | Beschreibung |
| a | Integer | Adresse für nächste Operation setzen |
| w | String | String auf das serielle EEPROM schreiben |
| r | Integer | String 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