mikrocontroller.net

Forum: Compiler & IDEs EEPROM beschreiben


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich schreibe setupdaten ins eeprom und lese diese beim programmstart 
aus.
Ab und zu wird der letzte Wert der struct nicht geschrieben, weiß jemand 
was ich dá falsch mache?

typedef UCHAR*  PCHARU;
#define EEPROM_POS   (PCHARU) 0x00

typedef struct
{
 float sinkingTone,
       climbingTone;
 u08   timeOffset,
       trackIntervall,
       lautstaerke,
       bluetooth,
       sms,
       config,
       mode;
} SETUPBLOCK;

volatile SETUPBLOCK setupBlock;

void writesetupdata (void)
{
 while(!eeprom_is_ready());
 cli();
 eeprom_write_block((u16*) &setupBlock,EEPROM_POS, sizeof(SETUPBLOCK));
 sei();
}

void readsetupdata (void)
{
 while(!eeprom_is_ready());
 eeprom_read_block((u16*) &setupBlock,EEPROM_POS, sizeof(SETUPBLOCK));
}

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ab und zu wird der letzte Wert der struct nicht geschrieben

Ich vermute mal, du läufst in ein anderes Problem:
Atmel hat dokumentiert, dass es ein Problem gibt, wenn
dem Chip der Versorgungsstrom abgeklemmt wird. Da kann
es passieren, dass noch mal ins EEPROM geschrieben wird
und zwar an der Stelle an der das Schreibregister fürs
EEPROM gerade steht.
Abhilfe: Nachdem du ins EEPROM geschrieben hast, schreibe
noch ein Byte an die EEPROM Adresse 0 (die du anderwertig
nicht benutzt). Dadurch ist sicher gestellt, dass ein
derartiges Fehlverhalten keine vitalen Bytes überschreibt,
da das EEPROM Adressregister dadurch auf ein nicht 'benutztes'
Byte zeigt.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann ich machen, das Problem wird warscheinlich nicht behoben sein.

Wenn ich noch eine struct an einer anderen Stelle hinterherschreiben 
möchte, so wird gar nichts mehr geschrieben.
Erst wenn die zweite struct wieder als erstes geschrieben wird sind die 
Daten gespeichert.
Als wenn nach denm 14ten oder 15ten Byte abgebrochen wird.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael wrote:
> kann ich machen, das Problem wird warscheinlich nicht behoben sein.
>
> Wenn ich noch eine struct an einer anderen Stelle hinterherschreiben
> möchte, so wird gar nichts mehr geschrieben.
> Erst wenn die zweite struct wieder als erstes geschrieben wird sind die
> Daten gespeichert.
> Als wenn nach denm 14ten oder 15ten Byte abgebrochen wird.

Dann kann ich dich nur bitten etwas mehr Informationen
rauszurücken. Zb ein komplettes Testprogramm, das dein
Problem demonstriert. Das können dann andere mal auf ihrem
µC (BTW: welcher denn) ausprobieren und versuchen den
Fehler nachzustellen und zu analysieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.