EEPROM beim mega8 funzt nicht wie gewünscht

Gast #1458056
Nabend,

ich gehe doch recht in der Annahme dass der mega8 512Bytes EEPROM hat?!

bei mir schauts nämlich aus als ob es weniger wären ...

hier ein Programmausschnitt

uint8_t eeByteArray[512] EEMEM;
int16_t messidx=0, u12, u18;

das folgende wird in einer Schleife aufgerufen
  if ( messidx<500 )
  {
    eeprom_write_byte(eeByteArray+messidx++, u12);
    eeprom_write_byte(eeByteArray+messidx++, u18);
  }

wenn ich die Schleife rechtzeitig abbreche passt alles,
mache ich das nicht werden die Daten am Anfang des EEPROMS mit Daten 
überschrieben die eigentlich am Ende stehen müssten

hat einer ne Idee?
Gast #1458069
Ich habe zwar keine Ahnung aber für micht sieht es so aus als ob Du pro 
Schleifendruchgang zwei Bytes "verbrauchst". Dann kommst Du natürlich 
auch nur 256 mal "rum".
Persönliche Seite #1458092
Was verstehst du unter rechtzeitig, ist <500 schon die Grenze?

Die Funktion ist do deklariert:
static _inline_ void   eeprom_write_byte (uint8_t *__p, uint8_t 
__value)

Bei den Parametern u12, u18 hast du einen impliziten cast nach uint8_t 
und eventuell schreibst du andere Werte als die erwarteten (z.B. 0 statt 
256). Im EEPROM stehen bei aufsteigenden Werten also 0..255,0...255 
hintereinander! Das mag so aussehen, als ob nur die erste Hälfte 
richtig beschrieben wird. Der komplette Quellcode würde helfen.
#1458096
Es sind 512 Bytes, ja.  Irgendwo muss da der Wurm sein, vielleicht auch 
in einem Programmteil, den Du nicht gezeigt hast.

Angenommen, das da oben ist die einzige Stelle, an der ins EEProm 
geschrieben wird: Kann Dein Index negativ werden?  Und Du schreibst 
jeweils nur das untere Byte Deiner 16-Bit-Variablen.  Das ist Dir schon 
klar?
Gast #1458231
>Ich habe zwar keine Ahnung aber für micht sieht es so aus als ob Du pro
>Schleifendruchgang zwei Bytes "verbrauchst". Dann kommst Du natürlich
>auch nur 256 mal "rum".
aber ich erhöhe ja den Index auch zwei Mal ...


>Bei den Parametern u12, u18 hast du einen impliziten cast nach uint8_t
>und eventuell schreibst du andere Werte als die erwarteten (z.B. 0 statt
>256).
ja ist klar, aber u12 und u18 sind kleiner als 256,
es funktioniert wie gesagt alles wenn ich die Messung rechtzeitig 
abbreche

dann werde ich wohl debuggen müssen, ich hoffte ich hätte was übersehen 
was vielleicht ganz offensichtlich ist ...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.