- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Mehr als 12 sprünge auf eine Sprungmarke nicht möglich?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2005
    Ort
    Pforzheim
    Alter
    43
    Beiträge
    163

    Mehr als 12 sprünge auf eine Sprungmarke nicht möglich?

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute,

    kann mir jemand von euch bitte erklären, warum ich nicht mehr als 12 mal auf eine Sprungmarke im Programm springen kann?

    Folgendes Problem: Ich wähle im ersten Menüpunkt zb. Frequenz aus. Dann werde ich im nächsten Menüpunkt aufgefordert die gewünschte Frequenz einzustellen. Jetzt kann ich aber nur 12 mal hoch ODER 12 mal runter ODER 5mal hoch und 7mal runter gehen bevor der Controller resetet.

    (Ich hofe ihr habt verstanden wie ich das meine)

    Jetzt habe ich die Möglichkeit das Programm zu debugen: Das Programm hängt sich beim 13ten Durchlauf an folgender Stelle auf: LCD F (siehe Code).

    Code:
    $regfile = "m32def.dat"
    $crystal = 1000000
    $baud = 9600
    
    Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.4 , Db6 = Porta.5 , Db7 = Porta.6 , E = Porta.2 , Rs = Porta.1
    Config Lcd = 16 * 2
    
    Initlcd                                                     'LCD initialisieren
    
    Config Porta.0 = Output                                     'PortA als Output setzten
    Config Portd = Input                                        'PortD Als Input Setzten
    
    
    Dim F As Integer
    Dim D As Integer
    Dim Puls As Integer
    Dim Pause As Integer
    
    
    Taste_1 Alias Pind.2
    Taste_2 Alias Pind.3
    Taste_ok Alias Pind.4
    
    F = 13
    Puls = 150
    Pause = 150
    
    
    Config Debounce = 100                                       'Entprellzeit für Tester auf 30ms
    Waitms 20                                                   'warte wegen LCD
    
    
    
                                                                   'Programm Start
    
    '+---------------------------------+
    '| Startbildschirm & erste Auswahl |
    '+---------------------------------+
    
       Cls                                                      'lösche LCD
       Locate 1 , 1
       Lcd "1-> Frequenz"
       Locate 2 , 1
       Lcd "2-> Puls/Pause"
    
    
       Do
          Debounce Taste_1 , 1 , Fstart , Sub
          Debounce Taste_2 , 1 , Puls_start , Sub
       Loop
    
    '+---------------------+
    '| Frequenz einstellen |
    '+---------------------+
    
       Fstart:
          Cls
          Locate 1 , 1
          Lcd "Frequenz =    Hz"
          Locate 1 , 12
          Lcd F                                           '<--- genau hier hängt er
          Locate 2 , 1
          Lcd "UP    OK    DOWN"
    
          Do
             Debounce Taste_1 , 1 , Fup , Sub
             Debounce Taste_2 , 1 , Fdown , Sub
             Debounce Taste_ok , 1 , Fok , Sub
          Loop
    
    
       Fup:
       F = F + 1
       Waitms 15
       Gosub Fstart
       'Return
    
       Fdown:
       F = F - 1
       If F <= 0 Then
       F = 0
       End If
       Waitms 15
       Gosub Fstart
       'Return
    
    .
    .
    .
    .   'Das Programm geht eigentlich noch weiter, hier aber uninteresant
    Bitte helft mir, ich bin am verzweifeln.

    Ach ja, einen anderen Controller habe ich auch schon ausprobiert.
    MfG Ich

    -------------------------------------------------------------
    http://www.lorenzschulz.de/Roboter.html

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    57
    Beiträge
    1.195
    Ich kann zwar kein Basic, aber sollten da nicht einfach return am Ende der Subroutine stehen und nicht Gosub FStart?

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Zitat Zitat von ogni42
    Ich kann zwar kein Basic, aber sollten da nicht einfach return am Ende der Subroutine stehen und nicht Gosub FStart?
    Jedesmal wenn man etwas mit Gosub anspringt legt der Prozessor die Rücksprungadresse (2 Byte) auf den Stack.
    Wenn man nie zurückspringt (Return) dann läuft der Stack irgendwann über und das Programm hängt sich auf.
    Genau das ist hier der Fall.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2005
    Ort
    Pforzheim
    Alter
    43
    Beiträge
    163
    Achso, dass hört sich logisch an.
    Aber ich will ja nicht an die Adresse zurück an der ich hin gesprungen bin, sondern weiter zurück.
    Wie kann ich das denn realisieren?
    MfG Ich

    -------------------------------------------------------------
    http://www.lorenzschulz.de/Roboter.html

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Zitat Zitat von strunz
    Aber ich will ja nicht an die Adresse zurück an der ich hin gesprungen bin, sondern weiter zurück.
    Wie kann ich das denn realisieren?
    Probiers mal mit "Goto".

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2005
    Ort
    Pforzheim
    Alter
    43
    Beiträge
    163
    Werd´s morgen probieren.

    Vielen dank für die Antworten...
    MfG Ich

    -------------------------------------------------------------
    http://www.lorenzschulz.de/Roboter.html

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2004
    Beiträge
    206
    evtl. kannst die stacks vergrößern.
    im Bascom oben bei den einstellungen.
    oder du machst es im programm am anfang selber. besser ist´s wie der kollege schon sagt mit "goto".

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    Du hast nen typischen Spaghetticode zusammengetippt.

    Normalerweise macht man ne "Mainloop", von welcher aus
    man in du Unterprogramme springt und von dort zurück.
    Klar kann ein Unterprogramm auch subprozeduren oder
    Funktionen enthalten, aber der Weg zu einer Funktion sollte
    in umgekehrter Reihenfolge wieder rückabgewickelt werden
    bis man wieder in der Mainloop ist.

    also :

    do
    gosub x
    loop

    x:
    gosub y
    return
    end

    y:
    ' hier tu ich was
    return
    end
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.04.2005
    Ort
    Pforzheim
    Alter
    43
    Beiträge
    163
    ok, danke für all die tipps, es tut nun einwandfrei.
    MfG Ich

    -------------------------------------------------------------
    http://www.lorenzschulz.de/Roboter.html

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Zitat Zitat von raptor_79
    evtl. kannst die stacks vergrößern.
    Bringt gar nix. Damit hängt sich das Programm wieder auf. Nur halt etwas später.

    Wie Vitus schon schrieb muss man das einfach vernünftig programmieren und schon klappt es. (Sorry, nicht bös gemeint).

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen