- LiFePO4 Speicher Test         
Ergebnis 1 bis 5 von 5

Thema: Label-Adresse im EEProm Datenbereich ermitteln

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.07.2008
    Ort
    Villingen-Schwenningen
    Beiträge
    143

    Label-Adresse im EEProm Datenbereich ermitteln

    Anzeige

    E-Bike
    Hallo,

    ich habe ein Problem zum Thema Label-Adresse und EEProm.

    Es geht darum, in einem Datenbereich des EEProm die Adresse auf ein Label herauszufinden, und Daten ab der Position auslesen zu können. Ich versuche das mal an einem konkreten Beispiel etwas genauer zu beschreiben.

    In Bascom gibt es hierfür natürlich einen Befehl: ReadEEProm <variable<[,<labelname>]

    Der Befehl funktioniert leider nicht in folgendem Fall:

    Der EEProm-Datenbereich enthält mehrere Benutzer-Konfigurationen. Jede Konfiguration beginnt mit einem Label. Hier ein Beispiel:

    Code:
    $eeprom
    
    Dim _eedataadr as word
    
    Konfiguration_1:
       data "Konfiguration 1"
       data 1 , 2 , 3 , 4 , 5 , 6
    
    Konfiguration_2:
       data "Konfiguration 2"
       Data 2 , 3 , 4 , 5 , 6 , 7
    
    Konfiguration_3:
       data "Konfiguration 2"
       Data 2 , 3 , 4 , 5 , 6 , 7
    
    Konfiguration_4:
       data "Konfiguration 2"
       Data 2 , 3 , 2 , 2 , 6 , 7
    
    Konfiguration_5:
       data "Konfiguration 2"
       Data 2 , 3 , 4 , 5 , 5 , 5
    Zum Auslesen der Konfiguration wollte ich eine Sub-Routine aufrufen, der eine Konfigurations-Nummer übergeben wird. Innerhalb der Sub wird nun die Konfigurations-Nummer abgeprüft und der erste Datenwert per ReadEEProm mit Labelangabe ausgelesen. Das funktioniert noch. Danach sollten alle weiteren Datenbytes ausgelesen werden. Und da wird nur noch Müll zurück gegeben.

    Hier die verwendete Sub-Routine:

    Code:
    Sub Init_Config(byval CfgNum as Byte)
       select case CfgNum
          case 1
             readeeprom CfgName , Konfiguration_1
          case 2
             readeeprom CfgName , Konfiguration_2
       end select
       readeeprom data1
       readeeprom data2
       readeeprom data3
       readeeprom data4
       readeeprom data5
       readeeprom data6
    End Sub
    Durch diese Methode würde ich mir eine Menge Code ersparen, vor allem, wenn die Konfigurationsdaten etwas umfangreicher werden.

    Im Moment komme ich nicht weiter. Irgendwie wird der Pointer auf das nächste EEProm-Byte entweder gelöscht oder überschrieben.

    Allerdings habe ich 2 Ideen.

    1. Entweder nach dem ersten Lesezugriff den Pointer irgendwie sichern und vor dem nächsten Read (ohne Labelangabe) wieder herstellen. oder

    2. Eigene Routinen schreiben (z.B. Inline-Assembler)

    im 2. Fall stellt sich allerdings die Frage, wie ich die Adresse des Labels im EEProm heraus bekomme.

    Die Bascom Methoden loadwordadr, loadlabel usw liefern wirre Adressen, die keinen Sinn ergeben.

    Auslesen und Wiederherstellen der Register EEARH und EEARL bringen vermutlich auch keinen Erfolg.

    Die Assembler-Befehle
    LDI ZL,low(labelname)
    LDI ZH,high(labelname)

    liefern im Z-Register ebenfalls keine vernünftigen Daten.

    Kann mir jemand an dieser Thematik etwas helfen? Vielleicht mit einer Lösung winken?

    Es würde mir schon mal weiterhelfen, wie ich mit 2 Assembleranweisungen die Adresse in einem Register wie Z gesetzt bekomme.

    Danke schon mal im Voraus.

    Mitch.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo Mitch,

    das sollte eigentlich funktionieren.

    Ich würde aber eher mit der ERAM Variante arbeiten, das funktioniert einfach und gut. Jede Konfiguration hat dann einen eigenen Namen (z.B. als ERAM Array).

    Gruß Dirk

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.07.2008
    Ort
    Villingen-Schwenningen
    Beiträge
    143

    Konfigurationen

    Ich stimme zu, wenn es um eine reine Konfigurationsangelegenheit geht, kann man das Mit ERam Arrays machen.

    Aber die Eingangsfrage war, wie ich die Adresse eines Labels innerhalb des EEProm-Datenbereichs ermitteln kann.

    Das Konfigurationsbeispiel (oben) sollte nur mal einen Anhaltspunkt bieten. Wenn ich jedoch immer mehr mit Inline-Assembler arbeite, komme ich um die Adresse des EERam-Labels nicht herum.

    Deshalb nochmal die Frage.

    Wie kann ich mit Bascom - (auch Inline-Assembler) die Label-Adresse eines Labels im EEProm ermitteln.

    Mitch.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo Mitch,
    ... wenn es um eine reine Konfigurationsangelegenheit geht ...
    Darum genau ging es ja in deiner Frage.

    Wenn es aber um die Label geht: Die stehen ja nicht im EEPROM, sondern werden vom Compiler in die EEPROM-Adressen umgesetzt. Vermutlich werden sie genauso wie Variablennamen verwaltet. Sicher kann man die auch direkt irgendwie auslesen, aber man fragt sich dann, WARUM man das in einer Hochsprache macht. Schließlich braucht man die Label eher in einer Hochsprache, in Maschinensprache geht es immer nur um Adressen.

    Wie dann mit dieser Adresse gelesen/geschrieben wird, kann man gut in der mcs.lib sehen (suche z.B. nach _READEEPROM).

    Wenn du aber konkrete Adressen im EEPROM brauchst und irgendwann mit Inline-Assembler zugreifen willst, geht das auch sehr gut mit ERAM. Du kannst mit "DIM var as Byte at $60" eine konkrete Adresse angeben. Die Funktion _READEEPROM (s.o.) zeigt, wie man da wieder dran kommt.

    Gruß Dirk

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.07.2008
    Ort
    Villingen-Schwenningen
    Beiträge
    143
    Gut! Ich glaube mit dieser Info kann ich was anfangen. danke.

Berechtigungen

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

12V Akku bauen