Variablen in EEPROM
Eine private Website zum Bilder und anderes zeigen ...
K
P

Einfache Variante, um unterschiedliche Variablen im EEPROM zu halten (dauerhafte Eindtellungen,..)

vorne bei der Funktions- und Variablendeklaration einfügen:

(Zusammenkopiertes Beispiel, nicht unbedingt Kompilierfähig!)

' ----------------------------------------------------------------------------
' EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM
' ----------------------------------------------------------------------------
' eeprom parameter, nie wieder umsortieren!!!!!
' immer nur hinten anfügen!!

Declare Sub Save_eeprom_params
Declare Sub Load_eeprom_params
Declare Sub Set_default_params
Declare Sub Check_add_params


Dim Dummy As Eram Long     ' in some cases first byte may be wrong cause of switch on/off effects

Const Maxeepromsize = 512  ' max. Größe der zu speichernden Variablen
Dim Ee_store_array(maxeepromsize) As Eram Byte

' ----------------------------------------------------------------------------
' EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM
' ----------------------------------------------------------------------------
' Keine Werte im EEPROM ablegen, die sich permanen ändern, EEPROM hat 
' BEGRENZTE ZAHL an Schreibzyklen!
' folgende Werte werden automatisch gesichert...

Dim Eeprom_store_block_start As Byte                        ' used for address

' hier nun die autoamtisch gespeicherten Variablen..
Dim Timer_times(maxtimerarray) As Long
Dim Timer_dir(maxtimerarray) As Byte
Dim Timer_days(maxtimerarray) As Integer

Dim Timer_length(maxtimerarray) As Integer

Dim Dimbacklight_max As Integer
Dim Backlight_mode As Byte

' usw. neue Variablen, die aufgehoben werden müssen, einfach
' HIER ANFÜGEN!!

Dim Eeprom_store_block_end As Byte                          ' used for address
' ----------------------------------------------------------------------------
' EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM
' ----------------------------------------------------------------------------
' EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM-EEPROM
' ----------------------------------------------------------------------------
' -------------------------------------------------------------------------

 Und hier die Funktionen:

'-----------------------------------------------------------------------------
' Set Default: Wirtd durch ganz besondere Bedienung/Jumpers,... aufgerufen
' Macht sozusagen Firmware default Werte! Kann u.U. weggelassen werden, wenn der 
' Rest des Programmes mit blödsinnigen Werten noch bedienbar ist und vernünftige
' Werte eingestellt werden können
'-----------------------------------------------------------------------------
Sub Set_default_params
' oben definierte Variablen auf Sinnvolle Vorgabewerte setzen!
  For I = 1 To Maxtimerarray
    Timer_dir(i) = Timerunused
    Timer_times(i) = 43200
    Timer_length(i) = Def_timer_limits(3)
    Timer_days(i) = 0
    Timer_days(i).day_wrk = 1
    Timer_days(i).day_free = 1
  Next I
  For I = 1 To Maxchannels
    Inputtimers(i) = 60                                     '' eeprom!                                   ' 2 minuten bewegungsmelder
    Input_modes(i) = Inp_night                              '' eeprom
  Next I
End Sub
'-----------------------------------------------------------------------------
' Ceck Parameters: Prüfen, ob Parameter im gültigen Bereich sind
' verhindert Fehlfunktionen, beim ersten Start (EEPROM Undefiniert oder alles FF)
' zusätzliche Sicherheit, nach Änderungen von Variablen durch Benutzer
' kann ggfs. weggelassen werden!
'-----------------------------------------------------------------------------
Sub Check_add_params
Local B As Byte
Local Timestr As String * 10

  For I = 1 To Maxtimerarray
    Timer_dir(i) = Timer_dir(i) And 3
    If Timer_dir(i) > 2 Then Timer_dir(i) = 2

    If Timer_times(i) < 0 Then Timer_times(i) = 0
    If Timer_times(i) > 86439 Then Timer_times(i) = 86439

    If Timer_length(i) < Def_timer_limits(1) Then Timer_length(i) = Def_timer_limits(1)
    If Timer_length(i) > Def_timer_limits(maxtimes) Then Timer_length(i) = Def_timer_limits(maxtimes)

  Next I
End Sub
'-----------------------------------------------------------------------------
' Lade Parameter: Eigentliche Ladefunktion, die Werte aus EEPROM-Block in die
' Variablen übernimmt, einmal bein Start aufrufen!
'------------------------------------------------------------------------------
Sub Load_eeprom_params
Local Tmpb As Byte
Local Tmpi As Integer
Local I As Integer
Local Cnt As Integer
Local Vadr As Integer
Local I1 As Integer
Local I2 As Integer

  I1 = Varptr(eeprom_store_block_start)
  I2 = Varptr(eeprom_store_block_end )
  Cnt = I2 - I1
  If Cnt > Maxeepromsize Then
    Call Debugout( "Speicherfehler")
    Exit Sub
  End If

  For I = I1 To I2
    Tmpi = I - I1
    Incr Tmpi
    Tmpb = Ee_store_array(tmpi)
    Out I , Tmpb
  Next I
  Glcd_contrastvalue = Ee_contrast_value

End Sub
'------------------------------------------------------------------------------
' Eigentliche Speicherfunktion, sollte nach jeder Parameteränderung aufgerufen
' werden. Kann auch sicherheitshalber einfach so zyklisch aufgerufen werden.
' Es wird nur geschrieben, wenn sich was geändert hat (EEPROM Zellen schonen!)
'------------------------------------------------------------------------------
Sub Check_eeprom_params
Local Tmp As Single
Local Tmpb As Byte
Local Tmpi As Integer
Local Tmpl As Long
Local I As Integer
Local Cnt As Integer
Local I1 As Integer
Local I2 As Integer
Local Vadr As Integer

  I1 = Varptr(eeprom_store_block_start)
  I2 = Varptr(eeprom_store_block_end )
  Cnt = I2 - I1
  If Cnt > Maxeepromsize Then
    Call Debugout( "Speicherfehler")
    Exit Sub
  End If

  For I = I1 To I2
    Tmpi = I - I1
    Incr Tmpi
    Tmpb = Inp(i)
    If Ee_store_array(tmpi) <> Tmpb Then Ee_store_array(tmpi) = Tmpb
  Next I

  Tmpb = Ee_contrast_value
  If Tmpb <> Glcd_contrastvalue Then Ee_contrast_value = Glcd_contrastvalue


End Sub

' ---------------------------------------------------------------------------
' ---------------------------------------------------------------------------

 

 

Powered by websitebaker, (c) by C. Lotze, based on a design by Chio Maisriml Nutzung der Texte oder Bilder - auch teilweise - nur nach Rücksprache, siehe Impressum!