Beschreibung Nach oben
Das Modul flash.c2 ermöglicht den wahlfreien Zugriff auf den
Flash-Speicher
der C-Control II.
D.h. es können Daten geschrieben und gelesen werden.
Es gibt jedoch folgende Beschränkungen:
- Eine Speicherzelle kann nur einmal beschrieben werden.
Vor einem Neubeschreiben muß das gesamte Flashsegment mit DelSeg()
gelöscht werden.
- Der Flash-Speicher ist nur für 100.000 Löschzyklen ausgelegt.
Bei mehr Löschzyklen können einzelne Speicherzellen schaden
nehmen und nichtmehr
beschreib-/löschbar sein.
Daher sollte der Flash nicht zu oft gelöscht werden.
Müssen viele Daten aktualisiert werden, wodurch ein Löschen
nötig wäre,
sollte besser ein externer Speicher, wie EEProms, welche bei Defekt
schnell wechselbar sind,
oder RAM (z.B. CC2Net-RAM-Device), welcher unendlich oft neu
beschrieben werden kann.
Hinweise zu den Segmenten:
Ein Segment belegt 64kByte(65536 Byte)
Segment | Hinweise |
0 | Betriebssystem - nicht verwenden !! Schreibzugriff ist möglich |
1 | frei - kann ohne Einschränkungen genutzt werden |
2 | frei - kann ohne Einschränkungen genutzt werden |
3 | Speicher für Systemroutinen - nicht verwenden !! Schreibzugriff ist möglich |
4 | VMC-Speicher(Programm) - nicht verwenden !! |
5 | VMC-Speicher(Programm) - kann verwendet werden, wenn
Programm kleiner 64kB wird beim Neuladen von Programmen gelöscht. |
6 | Konstanten-Speicher - nicht verwenden !! |
7 | Konstanten-Speicher - kann verwendet werden, wenn
weniger als 64kB Konstanten verwendet werden wird beim Neuladen von Programmen gelöscht. |
8 | SRAM - mit diesem Modul: nur lesen möglich !! |
Einfügen als Systemmodul
Nach oben
Die Datei flash.c2 in das Verzeichnis .\CControl2\Lib
kopieren und
in der Datei modules.txt die Zeile flash.c2 einfügen.
Ein zusätzliches Ausrufezeichen unmittelbar nach einem Modulnamen in modules.txt
bestimmt,
daß das Modul in jedem neuen Projekt von Anfang an aktiviert wird.
Konstanten Nach oben
// Einsprung-Adressen der System-Routinen:
// flash.hex:
const Segment = 0x0300;
//Flash-Segment
const _DELSEG = 0xE000;
const _RDINT = 0xE014;
const _WRINT = 0xE024;
const _RDLONG = 0xE056;
const _WRLONG = 0xE06A;
const _RDBYTEARR= 0xE09A;
const _WRBYTEARR= 0xE0C8;
const _RDINTARR = 0xE14E;
const _WRINTARR = 0xE15C;
const _RDLONGARR= 0xE172;
const _WRLONGARR= 0xE182;
Funktionen:
Segment löschen Nach oben
function DelSeg(byte segment)
Mit DelSeg() wird das angegebene Flashsegment gelöscht.
segment | Flashsegment 0-7 Achtung !! Mit 0 wird das Betriebsystem gelöscht ! Mit 3 wird der Speicher mit den ASM-Treibern gelöscht ! Mit 4, 5, 6,7 wird das Programm bzw. Teile davon gelöscht. |
Schreibfunktionen für einzelne Werte Nach oben
function writeInt(byte segment, int addr, int data)
returns int
function writeLong(byte segment, int addr, long data)
returns int
Mit diesen Funktionen werden einzelne Werte in den Flash geschrieben.
Bei der Adressierung muß beachtet werden, daß die verschiedenen
Variabeltypen eine unterschiedliche Anzahl an Bytes belegen. (Integer: 2Byte, Long: 4Byte)
Alle Werte werden mit LSB first gespeichert.
Kommt es beim Schreibvorgang zu einem Fehler, so wird FALSE (0) zurückgegeben.
Bei erfolgreichem Schreiben der Daten wird True(-1) zurückgegeben.
segment | Flashsegment 0-7 Achtung !! 0 = Betriebsystem 3 Speicher mit ASM-Treibern 4, 5, 6,7 Programm und Konstantenspeicher |
addr | Adresse für die Daten 0- 65534 Nur gerade Adressen ! |
data | zu speichernder Wert |
Schreibfunktionen für Arrays Nach oben
function writeByteArray(byte segment, int addr, byte data[], int
len) returns int
function writeIntArray(byte segment, int addr, int data[], int
len) returns int
function writeLongArray(byte segment, int addr, long data[], int
len) returns int
Mit diesen Funktionen können Arrays (Byte, Integer und Long) in den Flash
geschrieben werden. Werte zwischen -32768 und -1 für len werden
als 32768 bis 65536 interpretiert.
Alle Werte werden mit LSB first gespeichert.
Kommt es beim Schreibvorgang zu einem Fehler, so wird FALSE (0) zurückgegeben.
Bei erfolgreichem Schreiben der Daten wird True(-1) zurückgegeben.
segment | Flashsegment 0-7 Achtung !! 0 = Betriebsystem 3 Speicher mit ASM-Treibern 4, 5, 6,7 Programm und Konstantenspeicher |
addr | Adresse für die Daten 0- 65534 Nur gerade Adressen ! |
data | zu speicherndes Daten-Array |
len | Anzahl zu speichernder Array-Elemente |
Schreibfunktion für Strings(Zeichenketten) Nach oben
function writeString(byte segment, int addr, string s) returns int
Mit dieser Funktion wird der Inhalt einer Stringvariable in den Flash
geschrieben. Ein String belegt im Flash immer 32 Byte.
Kommt es beim Schreibvorgang zu einem Fehler, so wird FALSE (0) zurückgegeben.
Bei erfolgreichem Schreiben der Daten wird True(-1) zurückgegeben.
segment | Flashsegment 0-7 Achtung !! 0 = Betriebsystem 3 Speicher mit ASM-Treibern 4, 5, 6,7 Programm und Konstantenspeicher |
addr | Adresse für die Daten 0- 65504 Nur gerade Adressen ! |
len | Anzahl zu speichernder Array-Elemente |
Schreibfunktion für String-Arrays Nach oben
function writeStringArray(byte segment, int addr, string s[], int len) returns int
Mit dieser Funktion wird der Inhalt von Stringarrays in den Flash
geschrieben. Ein Stringarrayelement belegt im Flash immer 32 Byte.
Kommt es beim Schreibvorgang zu einem Fehler, so wird FALSE (0) zurückgegeben.
Bei erfolgreichem Schreiben der Daten wird True(-1) zurückgegeben.
segment | Flashsegment 0-7 Achtung !! 0 = Betriebsystem 3 Speicher mit ASM-Treibern 4, 5, 6,7 Programm und Konstantenspeicher |
addr | Adresse für die Daten 0- 65504 (- 32 x len) Nur gerade Adressen ! |
s[] | Referenz auf String-Array |
len | Anzahl zu speichernder Array-Elemente |
Lesefunktionen
für einzelne Werte
Nach oben
function readInt(byte segment, int addr) returns int
function readLong(byte segment, int addr) returns long
Mit diesen Funktionen werden einzelne Werte aus dem Flash gelesen und
zurückgegeben.
Bei der Adressierung muß beachtet werden, daß die verschiedenen
Variabeltypen eine unterschiedliche Anzahl an Bytes belegen. (Integer: 2Byte, Long: 4Byte)
segment | Flashsegment 0-7, 8=SRAM |
addr | Adresse für die Daten 0- 65534 Nur gerade Adressen ! |
Lesefunktionen für Arrays Nach oben
function readByteArray(byte segment, int addr, byte data[], int
len)
function readIntArray(byte segment, int addr, int data[], int
len)
function readLongArray(byte segment, int addr, long data[], int
len)
Mit diesen Funktionen können Arrays (Byte, Integer und Long) aus dem Flash
gelesen werden.Werte zwischen -32768 und -1 für len werden als
32768 bis 65536 interpretiert.
Es muß darauf geachtet werden, daß das Zielarray mindestens so viele
Elemente enthält, wie für len angegeben.
segment | Flashsegment 0-7, 8=SRAM |
addr | Adresse für die Daten 0- 65534 Nur gerade Adressen ! (Bei readByteArray() auch ungerade) |
data | Ziel-Array für gelesene Daten |
len | Anzahl zu lesende Array-Elemente |
Lesefunktion für Strings(Zeichenketten) Nach oben
function readString(byte segment, int addr, string s)
Mit dieser Funktion wird ein String aus dem Flash ausgelesen und
in der angegebenen Stringvariabel gespeichert.
Es werden immer 32 Byte aus dem Flash gelesen.
segment | Flashsegment 0-7, 8=SRAM |
addr | Adresse für die Daten 0- 65504 Nur gerade Adressen ! (Bei readByteArray() auch ungerade) |
s | Referenz für String-Variable |
Lesefunktion
für Strings-Arrays Nach oben
function readStringArray(byte segment, int addr, string s[], len)
Mit dieser Funktion wird ein String-Array aus dem Flash ausgelesen und
in dem angegebenen String-Array gespeichert.
Es werden immer 32 Byte pro Array-Element aus dem Flash gelesen.
segment | Flashsegment 0-7, 8=SRAM |
addr | Adresse für die Daten 0- 65504 (- 32 x len) Nur gerade Adressen ! (Bei readByteArray() auch ungerade) |
s[] | Referenz für String-Array |
Autor: André Helbig Mail: andre.h@cc2net.de
Erstellt: 18.4.2004