Forum: Mikrocontroller und Digitale Elektronik EEPROM beim mega8 funzt nicht wie gewünscht


von Bernd (Gast)


Lesenswert?

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?

von Der keine Ahnung hat (Gast)


Lesenswert?

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".

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Hc Z. (mizch)


Lesenswert?

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?

von Bernd (Gast)


Lesenswert?

>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 ...

von Bernd (Gast)


Lesenswert?

wie zu befürchten war der Fehler im restlichen Programm .... :-(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.