PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisfrage Logfile programmieren.



Accenter
14.12.2010, 01:31
In meiner Wohnungssteuerung (Atmel Mega128 mit Touchdisplay) laufen mitlerweile schon einige Daten zusammen und ich hätte da gerne ein Logfile um Abläufe protokollieren zu können.

Anfangs würde es mir mal reichen 8 Ereignisse zu speichern und dann jeweils das älteste immer zu überschreiben.

Ich lege also 8 Stringvariablen an die dann mit Zeit/Datum und dem Ereignis beschrieben werden. Wie stelle ich das mit der Reihenfolge an? Das "jüngste" Ereignis soll dann immer an oberster Stelle angezeigt werden und das älteste überschrieben werden.

Ich steh da total auf der Leitung wie ich das am besten programmieren kann. Das Logfile soll über RS-232 abgerufen werden. Da mein Terminalprogramm nicht immer aktiv ist, müssen die Daten im Atmel in den Stringvariablen zwischengespeichert werden.

Richard
14.12.2010, 06:37
Suche einmal nach FIFO oder FILO ,Ringspeicher, mehrdimensionales Array.....

Gruß Richard

BoGe-Ro
14.12.2010, 09:32
ich würde ein String-Array anlegen....
und sobald ein neuer Eintrag gemacht werden muss, alle Arrayinhalte eins nach hinten schieben.

also
for index=7 to 1 step -1
help=index+1
string(help)=string(index)
next
und danach einfach String(1) neu belegen


Gruß BoGe-Ro

Accenter
14.12.2010, 12:31
Das ist noch etwas zu hoch für mich.
Hier mal mein Ansatz wie ich es versuchen würde.

Ich erstelle 8 Stringvariablen in die ich schreibe. Nennen wir sie mal Speicher1, Speicher2, Speicher3.... Speicher8

Dann hab ich noch eine Bytevariable (Speicherplatzzaehler) die immer eines weiter zählt wenn ein Speicherplatz belegt ist damit in den nächsten geschrieben wird.

Wenn nun alle 8 belegt sind, speichere ich wieder in Speicher1 ab.

Wenn ich jetzt das Logfile aufrufe werden mir die Variablen Speicher1-8 untereinander ausgegeben.

Jetzt hab ich aber das Problem, dass ich nicht das "jüngste" Ereignis an erster Stelle habe. Anhand des Zeit und Datum Stempels kann ich es zuordnen aber übersichtlich ist es so nicht.

Vielleicht habt ihr einige Zeilen Code für mich damit ich das verstehe. laufe da gerade ziemlich an meine Grenzen.

radbruch
14.12.2010, 13:39
Hallo


laufe da gerade ziemlich an meine Grenzen.Nur jetzt nicht aufgeben, du hast es fast geschafft!


Dann hab ich noch eine Bytevariable (Speicherplatzzaehler)...Und genau dieser "Zeiger" sagt dir bei der Ausgabe der Logs, welches der aktuellste Eintrag ist.

Der Wert der Variable liegt bei dir von 1 bis 8, nach dem Speichern eines neuen Eintrags wird der Wert erhöht, wenn er größer als 8 ist, wird er wieder 1.

Bei der Ausgabe der Logs machst du es genau andersrum. Erst den Wert der Variablen um eins verringern, wenn er kleiner als 1 ist wird er 8. Nun zeigt die Variable auf den aktuellsten Eintrag, wieder eins weniger ist der zweitälteste usw. Das Ganze solange, bis die Zeigervariable wieder auf den selben Eintrag zeigt wie vor der Ausgabe.

Speicherplatzmerker = Speicherplatzzaehler
Speicherplatzzaehler = Speicherplatzzaehler-1
if Speicherplatzzaehler < 1 then Speicherplatzzaehler = 8

while (Speicherplatzmerker ungleich Speicherplatzzaehler)
sende Logeintrag(Speicherplatzzaehler)
Speicherplatzzaehler = Speicherplatzzaehler-1
if Speicherplatzzaehler < 1 then Speicherplatzzaehler = 8
wend

(sorry, mein Bascom ist sehr schlecht ;)

Gruß

mic

Accenter
15.12.2010, 13:41
Danke für die Unterstützung. Ich werde jetzt mal versuchen das zu programmieren. Die 8 Logfileeinträge werden auch nur eine Zwischenlösung sein. Ich habe ein i2C EEprom auf der Platine und muss nur noch rausfinden wie ich das anspreche. Ist ein Sockel für ein AT24C Eeprom.