-         

Ergebnis 1 bis 6 von 6

Thema: Verständnisfrage Logfile programmieren.

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360

    Verständnisfrage Logfile programmieren.

    Anzeige

    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.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Suche einmal nach FIFO oder FILO ,Ringspeicher, mehrdimensionales Array.....

    Gruß Richard

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    19.02.2010
    Beiträge
    67
    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

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    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.

  5. #5
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    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

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.03.2006
    Beiträge
    360
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •