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!