Hi,
hatte für mein letztes Projekt eine kleine Funktion geschrieben, da ich bei diesem Projekt mit Variablenblöcken hantiert habe, die ich nach bedarf immer auslesen musste, bzw. beschreiben und die ich um beliebig viele erweitern musste:
Alles anzeigen
Sicherlich gibt es da bestimmt noch Verbesserungsbedarf, sodass man evtl noch die festen Variablen durch Dynamische erweitern könnte (wusste aber nicht wie ich dynamische Variable über alle Variablentypen gestalten sollte, somit sind sie eben fest in der Sub verankert), aber sie funktioniert einwandfrei und ist für meine Zwecke absolut Zielführend.
Falls sie jemand nutzen möchte, steht es ihm frei sie zu nutzen, sollte jemand fragen oder Anregunden haben: Dies ist ein Forum, man wird nicht gebissen auch bin ich natürlich immer auf der Suche selbst nach anregungen wie ich meinen Programmierstil verbessern kann...
Gruß Kai
hatte für mein letztes Projekt eine kleine Funktion geschrieben, da ich bei diesem Projekt mit Variablenblöcken hantiert habe, die ich nach bedarf immer auslesen musste, bzw. beschreiben und die ich um beliebig viele erweitern musste:
BASCOM-Quellcode
- '**************************************************
- 'Aufgabe: Subroutine schreibt,liest oder löscht Daten von _slot Auswahl in entsprechender Section
- ' Die Speicherplätze der einzelnen Variablen sind in der Data Speicherregister_EEprom hinterlegt
- ' und können auf beliebig weitere Einträge erweitert werden.
- '
- '_slot = Gibt den Wert des gewünschten Speicherpackes an
- '_rw = Gibt an welche Funktion ausgeführt wird:
- ' 0 - Lesen
- ' 1 - Schreiben
- ' 2 - Löschen
- '_section = Gibt die Variable an die verändert wird 1-8,0 bedeutet alles ändern
- '
- 'Geschrieben und getestet: 24.11.2018
- 'Autor: Kai Listner
- '**************************************************
- Sub Eeprom_Datenplaetze(Byval _slot as Word , Byval _rw as Byte , Byval _section as Byte)
- Dim Register_auswahl(8) as Long
- Local Register as Byte
- Local Register_slotstart as Long
- Local Null_byte as Byte
- Local Null_int as Integer
- Local Null_word as Word
- Local X as Byte
- Null_byte = 0
- Null_int = 0
- Null_word = 0
- Const Startwert = &H10 'Offset von 16 Byte sofern gebraucht
- Const Byteregisterlaenge = &H10 'Angabe der Blocklänge aus Speicherregister_EEprom
- Register_slotstart = _slot * Byteregisterlaenge
- Register_slotstart = Register_slotstart + Startwert
- Restore Speicherregister_Eeprom
- For x = 1 To 8 'X= 1 to 8 muss an Datenblock bzw. die Anzahl an Variablen angepasst werden
- Read register
- Register_auswahl(x) = register + register_slotstart
- Next
- Select Case _rw
- Case 0: 'Lesen
- If _section = 0 Then
- For x = 1 To 8
- Eeprom_sectionlesen:
- Select Case x
- Case 1 : readeeprom Laenge , Register_auswahl(1)
- Case 2 : readeeprom Laenge_last , Register_auswahl(2)
- Case 3 : readeeprom Abstand , Register_auswahl(3)
- Case 4 : readeeprom Abstand_last , Register_auswahl(4)
- Case 5 : readeeprom Anzahl , Register_auswahl(5)
- Case 6 : readeeprom Anzahl_last , Register_auswahl(6)
- Case 7 : readeeprom Geschw , Register_auswahl(7)
- Case 8 : readeeprom Geschw_last , Register_auswahl(8)
- End Select
- If _section <> 0 Then Goto Eeprom_sectionlesen_end
- Next
- Else
- x = _section
- goto Eeprom_sectionlesen
- End If
- Eeprom_sectionlesen_end:
- Case 1: 'Schreiben
- If _section = 0 Then
- For x = 1 To 8
- Eeprom_sectionschreiben:
- Select Case x
- Case 1 : writeeeprom Laenge , Register_auswahl(1)
- Case 2 : writeeeprom Laenge_last , Register_auswahl(2)
- Case 3 : writeeeprom Abstand , Register_auswahl(3)
- Case 4 : writeeeprom Abstand_last , Register_auswahl(4)
- Case 5 : writeeeprom Anzahl , Register_auswahl(5)
- Case 6 : writeeeprom Anzahl_last , Register_auswahl(6)
- Case 7 : writeeeprom Geschw , Register_auswahl(7)
- Case 8 : writeeeprom Geschw_last , Register_auswahl(8)
- End Select
- If _section <> 0 Then Goto Eeprom_sectionschreiben_end
- Next
- Else
- x = _section
- Goto Eeprom_sectionschreiben
- End If
- Eeprom_sectionschreiben_end:
- Case 2: 'Löschen
- If _section = 0 Then
- For x = 1 To 8
- Eeprom_sectionloeschen:
- Select Case x
- Case 1 : writeeeprom Null_word , Register_auswahl(1)
- Case 2 : writeeeprom Null_word , Register_auswahl(2)
- Case 3 : writeeeprom Null_word , Register_auswahl(3)
- Case 4 : writeeeprom Null_word , Register_auswahl(4)
- Case 5 : writeeeprom Null_word , Register_auswahl(5)
- Case 6 : writeeeprom Null_word , Register_auswahl(6)
- Case 7 : writeeeprom Null_word , Register_auswahl(7)
- Case 8 : writeeeprom Null_word , Register_auswahl(8)
- End Select
- If _section <> 0 Then Goto Eeprom_sectionloeschen_end
- Next
- Else
- x = _section
- Goto Eeprom_sectionloeschen
- End If
- Eeprom_sectionloeschen_end:
- End Select
- End Sub
- '*****************************************************************************
- Speicherregister_EEprom:
- Data &H00 , &H02 , &H04 , &H06 , &H08 , &H0A , &H0C , &H0E
- ' | | | | | | | |
- ' | | | | | | | |
- ' | | | | | | | |
- ' | | | | | | | ---------------Count_last 2Byte
- ' | | | | | | ----------------------Count 2Byte
- ' | | | | | -----------------------------Speed_last 2Byte
- ' | | | | ------------------------------------Speed 2Byte
- ' | | | -------------------------------------------Distance_last 2Byte
- ' | | --------------------------------------------------Distance 2Byte
- ' | ---------------------------------------------------------Length_last 2Byte
- ' ----------------------------------------------------------------Length 2Byte
- ' +16Byte = &H10
- '*****************************************************************************
Falls sie jemand nutzen möchte, steht es ihm frei sie zu nutzen, sollte jemand fragen oder Anregunden haben: Dies ist ein Forum, man wird nicht gebissen auch bin ich natürlich immer auf der Suche selbst nach anregungen wie ich meinen Programmierstil verbessern kann...
Gruß Kai