Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: wert dauerhaft speichern Kategorie: C-Control I Micro (von Christoph berninger - 21.06.2005 21:47)
 Als Antwort auf wert dauerhaft speichern von tenner - 17.03.2005 21:54
Christoph berninger nutzt:  CC1-Unit V1.1, Micro

Das geht doch

'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'IIIIIII     DEMO ZUR MICRO - SYSTEMERWEITERUNG  EXTENSION 1    IIIII
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
' by DIE HARD
'--------------------------------------------------------------------
'
'-----------------------------------------------------------------------
' ERWEITERUNG: OPEN# INPUT# PRINT#
'              FILEFREE
'-----------------------------------------------------------------------
' Diese Demo ladet die BASIC-SYSTEMERWEITERUNG "PAGE0_EXT1.S19" und
' erweitert das Betriebssystem um die Möglichkeit der Datenspeicherung
' im internen Flash (nicht flüchtig, d.h. die Daten bleiben erhalten
' solange sie nicht überschrieben werden.
' Die Erweiterung läuft auf der SYSCODE PAGE 0.
' Deswegen verringert sich die max. Länge des nutzbaren BASIC-Bereiches um 256 Bytes
' also auf 1792 Bytes. Für die Datenaufzeichnung steht diese Anzahl abzüglich der
' Programmgrösse zur Verfügung.
'-----------------------------------------------------------------------
' DATEIFUNKTIONEN:
' Die Dateifunktionen erlauben das Aufzeichnen von Messwerten oder anderen Daten
' oder können zum Abspeichern von Information benutzt werden, die nach Ausfall der
' Betriebsspannung wieder in die Programm-variablen geladen werden sollen.
' Der Speicherbereich im FLASH nach dem Anwenderprogramm -meist
' der größte Teil - steht für diesen Zweck zur Verfügung. Der Speicherbereich wird
' als eine Datei verwaltet, auf die lesend oder schreibend zugegriffen werden kann,
' nachdem sie mit dem entsprechenden Attribut geöffnet wurde.
'
' Die Erweiterung ermöglicht folgende Befehle:
' OPEN#
' INPUT#
' PRINT#
' FILEFREE
'
' Der Befehl zum Öffnen der Datei lautet:

' OPEN# FOR WRITE
' OPEN# FOR READ

' Dabei bedeutet WRITE das Öffnen zum Schreiben mit Überschreiben eventueller alter Aufzeichnungen,
' READ das Öffnen zum Auslesen der Aufzeichnungen. Gleichzeitig setzt OPEN den Dateizeiger auf den Anfangswert
' Nach einem Reset ist der Dateizeiger gelöscht, es kann also nicht mit einer begonnenen
' Aufzeichnung fort gefahren werden. Gespeicherte Werte können natürlich gelesen werden aber der Zeiger
' muss auf jeden Fall wieder mit OPEN initialisiert werden, sodass eine APPEND Funktion
'( das Anhängen von Daten) nicht möglich ist (oder nur mit einem Trick)


' FILEFREE
' stellt fest wie viele Blöcke a 64 Byte aktuell zur freien Verfügung stehen.
' Direkt nach einem OPEN-Befehl ist das Ergebnis der maximale Wert, der sich verringert,
' je mehr Blöcke geschrieben oder gelesen werden.
' FILEFREE berücksichtigt, dass die PAGE0 geladen ist (sie erweitert ja das Betriebssystem
' um die Funktion der Datenspeicherung).
' Die Auskunft von FILEFREE = 10 bedeutet dass Block 0 bis Block 10 verfügbar ist,
' es also 11 Blöcke sind (der erste Block ist Block 0)

' Das Schreiben und Lesen erfolgt mit den Befehlen

'PRINT# term

'wobei das berechnete Ergebnis des Terms gespeichert wird, beziehungsweise

'INPUT# variable

' wobei variable eine definierte Bytevariable des Programms bezeichnet. Schreiben in und Lesen aus der Datei
' erfolgt streng sequentiell. Dafür wird intern ein Dateizeiger verwaltet, der nach jedem Zugriff um 1 erhöht wird.
' Vor jedem Schreiben sollte geprüft werden, ob noch genügend Platz im EEPROM zur Aufnahme der Daten vor-handen ist.
' Dafür kann die Funktion FILEFREE abgefragt werden, die als Ergebnis die Größe des noch freien Speichers liefert
' (in Blöcken zu feweils 64 Byte). Folgendes Beispiel zeigt die prinzipielle Anwendung der Funktion
'
' Anwendung:

' #LOOP
' if filefree <= 0 then goto done
' print# werte
' goto LOOP

'#done
' .........

'-------------------------------------------------------------------------------------
' ACHTUNG:
' Als Benutzer müssen Sie selbst darauf achten, dass durch ein
' überlanges BASIC-Programm der Maschinencode auf Page 0 oder evtl. Page 1
' nicht überschrieben wird.Ebenso müssen Sie in Ihrem Programm gewährleisten,
' dass nicht mehr Blöcke als vorhanden beschrieben werden.
' Wenn Sie die PAGE1 geladen haben, ist die max. Anzahl der freien Blöcke
' FILEFREE-4 , da FILEFREE davon ausgeht,dass die PAGE1 frei ist

'------------------------------------------------------------------------------------
' Das Beispiel:
' Dieses einfache Beispiel wartet nach Programmstart ca. 3 s auf einen Tastendruck.
' Wird die Taste gedrückt, so werden 3 feste Werte dauerhaft im FLASH gespeichert.
' Drücken Sie jedoch die Taste nicht, so geht das Programm in den READ-Modus und liest diese 3
' Werte aus dem FLASH und schreibt sie über die serielle Schnittstelle an das Terminal.
' LED4 zeigt Leseoperation, LED5 Schreiboperation. LED 6 zeigt die Bereitschaft, waren
' auf Tastendruck.
'-------------------------------------------------------------------------------------
'------------------------------------------------------------------------------------
' SIE DÜRFEN DIESEN TREIBER NUR LADEN, WENN DIE PAGE0/1 NICHT VON ANDEREN
' TREIBERN/SYSTEMERWEITERUNGEN, DIE SIE BENÖTIGEN, BELEGT IST !
' Der Treiber ist nicht für die MICRO mit der OS-Version 2.00 geeignet
'-------------------------------------------------------------------------------------
'--------------------------
'------ I/O PORTS ---------
'--------------------------
define LED4     port[4]
define LED5     port[5]
define LED6     port[6]
define TASTER   port[3]
define TXDATA   port[1]
define RXDATA   port[2]
'--------------------------
'---- SYSTEM MEMORY -------
'--------------------------
define DATA     byte[1]
define ad6 ad [6]

'BAUD 19200
BAUD 9600
second=0
'--------------------------------------------------
'         CHECK IF READ OR WRITE DATA             -
'--------------------------------------------------
LED6=on
#SELECT
if not TASTER then goto WRITE_DATA
if second<3 then goto SELECT
'--------------------------------------------------
'         READ DATA FROM MEMORY                   -
'--------------------------------------------------
open# for read
LED6=off:LED4=on:print" READING DATA"
input# DATA:print DATA
input# DATA:print DATA
input# DATA:print DATA
pause 50:LED4=off
#STOP1
goto STOP1
'---------------------------------------------------
'         WRITE DATA TO MEMORY
'---------------------------------------------------
#WRITE_DATA
print"WRITING"
open# for write
LED6=off:LED5=on
pause 2
print# ad6
print# ad6
print# ad6
pause 50:LED5=off
PRINT"END WRITING"
#STOP2
goto STOP2


syscode "page0_ext1.s19"

 Antwort schreiben

Bisherige Antworten: