- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: State Machine oder HW/SW -stack Problem

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.08.2008
    Alter
    47
    Beiträge
    15

    State Machine oder HW/SW -stack Problem

    Servus zusammen, ich beschäftige mich wieder mit der State Machine http://www.roboternetz.de/wissen/ind...e_Machine_Menu

    Habe die Menüpunkte um einige Funktionen erweiter (Jeder Punkt ermöglicht die Manipulation von integerwerten), jezt habe ich das Poblem das, wenn ich in mein 5tes Untermenue wechsle, sich der Contoler Resettet und wieder von Vorner Anfängt als wäre er frisch gestartet.

    den hwstack, swstack habe ich mittlerweile auf 1024 erhöht und die framesize auf 512.

    Gib es eine Möglichkeit die Belegung der Stacks abzufragen, wobei ich eigentlich nicht glaube das es an deren größe leigt, denn die ganze zeit ging es mit 256, bis ich halt die 5te Ebene Eingefügt habe.

    Hat zufällig jemand eine Idee wie ich den Fehler Einkreisen könnte?
    Den Code mit mehr als 3500 Zeilen zu Posten spare ich mir mal hier

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Möglicherweise ist der Speicherverbrauch durch die 5. Ebene nicht mehr nur 2x so groß, sondern vielleicht 4x oder 8x? ich weiß es nicht, aber wäre mein erster Gedanke...

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Naja spars dir mal nicht, lad die .bas +.cfg direkt hier rein. Dann kann man im Simulator mal drüberschauen, ob man irgendwo nen Grund für das Verhalten findet.
    #ifndef MfG
    #define MfG

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    26.08.2008
    Alter
    47
    Beiträge
    15
    Das wird im Simulator nicht laufen, da das ganze mit einem kleinen Display von Display3000 verbunden ist.

    Freien HWStack habe ich, es stehen noch 560 zur Verfügung. Ich werde dann mal den Code Später hier rein klopfen.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    21.07.2008
    Ort
    Moosburg
    Alter
    46
    Beiträge
    49
    Hi!

    Hört sich ganz nach einem Buffer Overflow an. Dein RAM-Bedarf wird ziemlich sicher zu groß sein, so daß das Programm entweder Deinen Stack überschreibt oder den Stack für Funktionsaufrufe.

    Das gleiche Problem hatte ich bei einem C-Programm. Ein Puffer sollte Daten für eine Übertragung zwischenspeichern. Mal gings, mal gings nicht - AVR reagierte nicht mehr, AVR resettete. Zum Debuggen der absolute Horror.

    Die Lösung des Ganzen war, dass der Puffer zwar in den Speicher passte, aber dann kein Platz mehr für den Stackframe bei Funktionsaufrufen übrig blieb.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    26.08.2008
    Alter
    47
    Beiträge
    15
    Es hat zwar etwas gedauert, aber ich habe mal den Code auf das nötigste reduziert und der Fehler kommt imer noch. So wie ich in SUB U110 springe Resette sich das ganze und fängt von vorne an. Auch wenn ich in eine Sub wechsel die ich schon mal ausgeführtz habe kracht wenn ich diese gegen die U110 auswechsele.


    Der code ist als bas File angehängt.
    Angehängte Dateien Angehängte Dateien
    • Dateityp: bas tmp.bas (26,3 KB, 22x aufgerufen)

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.03.2004
    Beiträge
    185
    Hallo,

    vorneweg: ich habe die State Machine in RNWissen geschrieben

    Der Witz dieser State Machine besteht darin, dass sie nur einen Zustand=Pointer=Index wechselt, d.h. es gibt keine Stack-Ebenen. Egal wieviel Menüebenen Du bastelst, es verbraucht keinen zusätzlichen Stack (PUSH/POP).
    Dein Fehler muss also irgendwo in Deinem Code liegen. Leider kann ich die tmp.bas nicht so einfach zum Laufen bringen ($include Init21_display3000.bas).

    Tip: Setze die State Machine erst einmal im Simulator zusammen und ergänze Deine Display3000 Routinen später.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    26.08.2008
    Alter
    47
    Beiträge
    15
    Hi Thomas,
    die Funktionsweise der State Machine ist mir schon verständlich. (Mal neben bei, dein Beitrag ist echt super)

    Ich glaub aber nicht das es am meinem Code liegt, denn wenn ich die "fehlerhafte" Sub gegen eine ander auswechsel die Vorher Funktioniert, z.B "Hmenu_select", kracht es auch.

    Also lag meine Vermutung das es wohl ein Stack Problem ist....

    Ich werde noch mal versuchen den Code für den Simulator um zu schreiben....

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.03.2004
    Beiträge
    185
    Hallo Loro, Du scheinst aber hier im Forum auch der einzige Freund der State Machine zu sein.
    Ich habe mal unser letztes Gespräch zur State Machine rausgekramt: https://www.roboternetz.de/phpBB2/ze...ag.php?t=42629

    Zitat Zitat von Loro
    Ich werde noch mal versuchen den Code für den Simulator um zu schreiben....
    Ok, bastel mal den Code in den Simulator.
    Stichwort: $SIM
    Ich schau mir dann gerne Deinen Code an.
    PS: Die State Machine hat wirklich keinen Memory Leak. Den hast Du reingebastelt

Berechtigungen

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

12V Akku bauen