
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
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 |