Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > > Hallo, ich habe eine Frage zur Speicherung in Eprom oder Ram. > > Kann man Strings in ein Array speichern ? Ich möchte als Datenlogger das Datum und die Uhrzeit fortlaufend > > speichern oder muss ich das umständlich mit strx.getnum umwandeln ? > > > > MfG > > > > R. Mandel > > Hallo, > > ich benutze genau diese Funktion: Event-Logging über V24 und parallel in ein EEPROM. > Ich habe 2 EEPROMS: eines für alle Konfigurationseinstellungen > (hier liegen auch die Start/Ende Adressen für das LogEEPROM ab) > Im 2. EEPROM (Adresse 3) speichere ich die letzten Log-Events mit Datum und Text als Ringspeicher. > Jedoch habe ich es mir hier mit der Speicherverwaltung einfach gemacht: > Jede Eintrag benötigt 64 Byte (32 für den Zeitstempel und 32 für den Text) > > Aus den restlochen Code rufe ich nur die function log() > z.B. log("Steuerung initialisiert"); oder bei variablen log(logstring); > > Hier mal der Quellcode: > <code> > //----------------------------------------------------------------------------------- > function log (string s) //Logging von Events zur Ausgabe auf hwcom und in EEPROM > //----------------------------------------------------------------------------------- > {string time; > hwcom.put(13); //Carriage Return - Cursor an den Anfang der Zeile setzen > time=(system.day()/10+0x30) + ((system.day()%10)+0x30); //Tag ausgeben > time=time + "."; //Punkt zwischen Tag und Monat > time=time + (system.month()/10+0x30) + ((system.month()%10)+0x30); //Monat ausgeben > time=time + "."; //Punkt zwischen Monat und Jahr > time=time + (system.year()/1000+0x30) + (((system.year()%1000)/100)+0x30); //Jahr ausgeben > time=time + ((system.year()%100)/10+0x30) + ((system.year()%10)+0x30); //Jahr ausgeben > time=time + 32; //ASCII-Zeichen 32 = Blank > time=time + (system.hour()/10+0x30) + ((system.hour()%10)+0x30); //Stunde ausgeben > time=time + ":"; //Doppelpunkt zwischen Stunde und Minute > time=time + (system.minute()/10+0x30) + ((system.minute()%10)+0x30); //Minute ausgeben > time=time + ":"; //Punkt zwischen Minute und Sekunde > time=time + (system.second()/10+0x30) + ((system.second()%10)+0x30);//Sekunde > time=time + 32; //ASCII-Zeichen 32 = Blank > time=time + 32; //ASCII-Zeichen 32 = Blank > hwcom.send(time,str.length(time)); //Zeitstempel über hwcom senden > wait hwcom.ready(); > hwcom.send(s,str.length(s)); // Logtext über hwcom senden > hwcom.ret(); > // Schreiben des Logs in EEPROM (24C64 auf Adresse 3 ) > eeprom.writestr(3,EEStart,time); //Zeitstempel > eeprom.writestr(3,EEStart+32,s); //Logtext > EEStart = (EEStart+64); // Schreibpointer hochsetzen > if EEEnde < EEStart EEEnde=EEStart; // Endpointer mitschleppen, bis Ringspeicher voll ist > if EEStart >= 0x2000 EEStart = 0x0000; //Wenn EEProm Ende, dann wieder vorne beginnen > eeprom.writeint(0,513,EEStart); // neue Werte Restartfest im 1. EEPROM sichern > eeprom.writeint(0,515,EEEnde); > }; > //----------------------------------------------------------------------------------- > function leselog() // EEProm Logfile lesen > //----------------------------------------------------------------------------------- > {int i; //Schleifenzähler > string s; //Stringinhalt > byte y; // Stringlänge > if debug //Ausgabe der Pointer > { > s="EEStart: "; > str.putint(s,EEStart); > hwcom.send(s,str.length(s)); > wait hwcom.ready(); > s="EEEnde: "; > str.putint(s,EEEnde); > hwcom.send(s,str.length(s)); > wait hwcom.ready(); > hwcom.ret(); > }; > for i = 0 ... (EEEnde-64) step 64 // von Anfang bis Endpointer-64 lesen > { > y=eeprom.readstr(3,i,s); //y liefert die Stringlänge, keine Fehlerbehandlung bei y=0 > hwcom.send(s,y); > wait hwcom.ready(); > y=eeprom.readstr(3,i+32,s); > hwcom.send(s,y); > wait hwcom.ready(); > hwcom.ret(); > if i >= 0x1fc0 break; // nicht über Bereich hinauslesen falls falscher Pointer > }; > }; > </code> > > Vielleicht dient dies ja als Anregung. > > Gruß > Jörg