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