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?
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".
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.
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?
>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 ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.