- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 8 von 8

Thema: Bascom, Werte aus Eeprom lesen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.08.2007
    Beiträge
    36

    Bascom, Werte aus Eeprom lesen

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich habe hier ein merkwürdiges Problem. Controller ist ein Mega8

    Ich möchte 27 Werte aus dem Eeprom lesen, das mach ich wie folgt
    Code:
    Dim Taste as long ' der Zaehler für die Tastendrücke=Speicherplatz
    Dim Zaehler as long  'brauchen wir im Case.................
    Dim Color_wert(27) As Byte ' das die Variable wo die Werte aus dem Eeprom rein sollen 27 Bytes für 27 Werte
    Dim Save_wert(280) As Eram Byte At &H06       ' das die Deklaration fürs Eeprom, 280 lang für 10 x 27 Bytes
    
    bla 
    bla 
    bla
    
    Auswahl:
    taste = taste+1
    
    select case Taste
    
    case 1
    .....
    case 2
    .....
    Case 7
    Zaehler = 0
    For I = 0 To 27 ' die ERSTEN 27 Werte aus der Variablen Color_wert
    Color_wert(zaehler) = Save_wert(i)
    Incr Zaehler ' Zaehler erhöhen das die Variable Colorwert auch den entsprechenden Wert an der richtigen Position bekommt
    Next I
    
    Case 8
    Zaehler = 0
    For I = 27 To 54
    Color_wert(zaehler) = Save_wert(i)
    Incr Zaehler
    Next I
    
    Case 9
    Zaehler = 0
    For I = 54 To 81
    Color_wert(zaehler) = Save_wert(i)
    Incr Zaehler
    Next I
    usw
    usw
    usw
    
    
    'so dann gehts zur Ausgabe über UART
    for i = 1 to 27
    print color_wert(i)
    das wars eigentlich schon !
    Abgesehen das Color_wert natürlich bei 0 losgeht, erstmal egal

    Das Problem, wenn im Eeprom bei Case 8 also von 27-54 nichts steht sollte ja eigentlich 255 ausgegeben werden, genau in diesem Fall wenn da nichts steht oder das gleiche wie bei Case 7 also 0-27 hängt sich alles auf.
    Also Ausgabe wenn bei Taste 7, 27x255, jetz nochmal Taste also Taste=8 peng aufgehangen.

    Wenn ich manuell verschiedene Werte da abspeicher gehts komischer weise.

    Warum passiert das?
    Es geht darum, wenn man an die entsprechende Stelle noch nicht gespeichert hat sollte eigentlich 0 ausgegeben werden, daher Füll ich den Eeprom beim ersten Boot mit 0 , aber das bringt nix, auch füllen mit 1 bringt nix, erst wenn wirklich unterschiedliche Werte drin stehen funktionierts.
    Ich weiß keinen Rat mehr

    DANKE für Eure Hilfe
    Heiko

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Indizes bei Bascom fangen immer mit "1" an.
    Du startest mit "0". Das kann Effekte haben, die du erstmal beseitigen solltest.
    und: For i=0 to 27 ergibt 28 Werte (nicht 27, wie im KOmmentar)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    08.08.2007
    Beiträge
    36
    Indizes bei Bascom fangen immer mit "1" an

    kannst du mir das bitte näher erklären?

    Das for i = 0 to 27 28 ergibt ist mir Klar , aber wenn es bei "1" anfängt wieso giebts dann einen "Color_Wert(0)" ?
    Ich war mir da auch nicht sicher, daher hab ich manuell den Color_Wert(0) einen Wert gegeben und siehe da, Print color_Wert(0) hat DEN Wert, also gibts einen Color_Wert(0)....?? ODER?

    Also
    Dim Color_Wert(27) as Byte wo gehts nun los? bei 0 oder bei 1? Sinds nun 27 oder 28 Color_Werte?

    Dim Save_wert(280) As Eram Byte wo gehts los? bei 0 oder bei 1?


    DANKE
    Heiko

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ja, kann verwirren. Sache ist so:
    DIM variable ( 27) as irgendwas ' heisst: ein Array von 27 elementen.
    FOR x = 1 TO 27
    variable(x) = wert
    NEXT

    aaaaaaaber: Bascom checkt nicht, ob ein Indexwert überhaupt möglich ist
    schreibst du
    variable( 0 ) = wert
    oder
    variable( 28 ) = wert
    vernichtet Bascom die Daten VOR bzw. NACH dem array, SAGT ABER KEIN WORT !
    und es ist glücksache, was dann so im Einzelnen passiert.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    08.08.2007
    Beiträge
    36
    OK, dann vermerk ich mir das so, immer bei "1" anfangen............

    Zumindest funktioniert plötzlich die Sache mit dem Eeprom lesen, hatte den Controller 2 Tage nicht angesehen, plötzlich gehts, sehr sehr komisch.

    DANKE
    Heiko

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von PicNick Beitrag anzeigen
    Code:
    variable(0) = wert 
    variable(28) = wert
    vernichtet Bascom die Daten VOR bzw. NACH dem array, SAGT ABER KEIN WORT !
    Das ist nicht richtig.
    Bascom gibt in diesem Fall einen "Index out of Range" Fehler aus und compiliert den Code nicht.
    Einen statisch deklarierten Index außerhalb des zulässigen Bereiches kann der Bascom-Compiler erkennen, nur dynamische Bereichsüberschreitungen wie:
    Code:
    x = 28
    variable(x) = wert
    werden nicht erkannt. Das wäre nur mit zusätzlichem Code möglich, außerdem müsste dann ein Error-Handler vorgesehen werden.
    Dafür ist der Programmierer also selbst verantwortlich.

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Gut, ich war nicht ausreichen präzise.

    Im Übrigen ist das kein Bascom-Feature. Wenn du durch einen out-of-range-Index nicht gerade eine Zugriffs-Verletzung auslöst, kannst du alle mir geläufigen Systeme u. Plattformen abmurksen.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von PicNick Beitrag anzeigen
    Im Übrigen ist das kein Bascom-Feature.
    Das Überschreiben von Variablen mit beliebigen Werten ist verständlicherweise etwas, was kein Programm wegstecken kann.
    War aber auch nicht Punkt meines Post, sondern wie sich eben Bascom im Speziellen verhält.

    Es wäre selbstverständlich möglich, daß der Compiler Code einbaut, der bei jedem Arrayzugriff den Index auf Gültigkeit prüft, dem Compiler ist schließlich die Größe des Arrays bekannt. Das würde aber einen deutlichen Overhead und damit Verlangsamung des Codes bedeuten und darum wird das üblicherweise nicht gemacht, auch nicht in anderen Programmiersprachen.

Ähnliche Themen

  1. EEPROM lesen/schreiben
    Von MechMac im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 07.01.2011, 10:24
  2. In log Dateien zugreifen und werte lesen und auswerten
    Von salhub im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 02.06.2008, 09:21
  3. Ist-Werte zu lesen
    Von beck im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 12.09.2007, 20:27
  4. ATmega8 aus dem EEPROM lesen und ins EEPROM Schreiben
    Von melowtrax im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 20.02.2006, 23:32
  5. .bgf auf eeprom schreiben/lesen?
    Von dh20 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 09.09.2005, 13:08

Berechtigungen

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

Solar Speicher und Akkus Tests