- LiFePO4 Speicher Test         
Ergebnis 1 bis 6 von 6

Thema: Local-Variablen werden nach Beenden der Sub nicht gelöscht?

  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638

    Local-Variablen werden nach Beenden der Sub nicht gelöscht?

    Anzeige

    Praxistest und DIY Projekte
    Hallo!


    Ich habe folgende Sub, die periodisch in der Main alle Sekunde aufgerufen wird:
    Code:
    Sub Glcd_process_update
    
       Local String_temp As String * 2
       Local Timestring As String * 8
       Local Datestring As String * 8
    
    
       If Global_glcd_mask = 0 Then
    
          'switch do big font
          Setfont My12_16
    
          'get timestring
          String_temp = Str(global_timedate_hour)
          String_temp = Format(string_temp , "00")
          Timestring = Timestring + String_temp
          Timestring = Timestring + Global_doublepoint
    
          String_temp = Str(global_timedate_min)
          String_temp = Format(string_temp , "00")
          Timestring = Timestring + String_temp
          Timestring = Timestring + Global_doublepoint
    
          String_temp = Str(global_timedate_sec)
          String_temp = Format(string_temp , "00")
          Timestring = Timestring + String_temp
    
          'write timestring
          Lcdat 1 , 1 , Timestring , 0
    
          'Delete Strings
          String_temp = ""
          Timestring = ""
          Datestring = ""
    
    
       End If
    
    
    End Sub
    Das lustige daran ist: Wenn ich den Abschnitt unter "Delete Strings" rausnehme, dann hängt er mir an der letzten Uhrzeit die aktuelle Uhrzeit an. Ich dachte immer, lokale Variablen werden nach Rückkehr zur Main gelöscht?
    Grüße
    Thomas

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Thomas,
    schau dir mal die Hilfe zu "LOCAL" an:
    Notice that a LOCAL variable is not initialized. It will contain a value that will depend on the value of the FRAME data. So you can not assume the variable is 0. If you like it to be 0, you need to assign it.
    Das war schon immer so. Da man der Variable meistens einen Wert zuweist, fällt das nicht auf.

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Hallo!


    Vielen Dank für deine Antwort. Mir ist das tatsächlich noch nie aufgefallen. Können die in einer anderen Sub überschrieben werden oder haben die immer ihren eindeutigen Speicherbereich?
    Grüße
    Thomas

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Der belegte Speicher für die lokalen Variablen wird beim Verlassen der Sub oder Function wieder freigegeben. Wenn eine andere Sub aufgerufen wird, können diese Speicherzellen nun wieder verwendet und damit überschrieben werden.

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von for_ro Beitrag anzeigen
    Der belegte Speicher für die lokalen Variablen wird beim Verlassen der Sub oder Function wieder freigegeben. Wenn eine andere Sub aufgerufen wird, können diese Speicherzellen nun wieder verwendet und damit überschrieben werden.
    Also gefährlich, das so zu verwenden. Alles klar, danke für die Info!
    Grüße
    Thomas

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    52
    Beiträge
    765
    Wieso gefährlich? Der Sinn dahinter ist, dass wenn das RAM knapp wird, sich mehrere Subs Speicherbereiche zum Zwischenspeichern, z.B. für Rechnungen / Zwischenergebnissen, teilen. Nach dem verlassen der Sub gibt es keine Gewähr, dass der Wert erhalten bleibt. Soll beim späteren Aufruf der Sub mit dem letzten Wert weitergearbeitet werden, dann ist auf globale Variablen zu setzen.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 16.02.2010, 20:01
  2. Nach Interrupt werden die Ports zurückgesetzt
    Von DanielV. im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 22.09.2007, 19:20
  3. Wie werden Variablen in Bascom definiert?
    Von ThomasKopsch im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 14.04.2007, 11:09
  4. Antworten: 2
    Letzter Beitrag: 02.11.2006, 16:18
  5. Poti an CC - 255 werden schon nach 3/5 Drehung erreicht?
    Von DaSilver im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 8
    Letzter Beitrag: 20.07.2006, 12:34

Berechtigungen

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

Labornetzteil AliExpress