- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 15

Thema: mal wieder eine EEPROM Frage

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Es gibt für diese "Wo liegt das Zeug im EEPROM"-Problematik auch eine schönere Lösung. Bestehend aus einem Headerfile in das du deine Konfigurationsdatenstruktur reinschreibst, ein Sourcefile und einem Anwendungsbeispiel.

    config.h
    PHP-Code:
    typedef struct {
        
    int foo// Eigene Konfigurationsvariablen hier unterbringen
    Config_Data_t;

    extern Config_Data_t * const config
    config.c
    PHP-Code:
    #include <avr/eeprom.h>

    #define EEPROM_SIZE (E2END + 1)

    typedef struct {
        
    uint8_t firstByteDummy;

        
    Config_Data_t config;

        
    uint8_t aligmentDummy[EEPROM_SIZE sizeof(Config_Data_t) - 1];
    Config_Data_Container_t;

    EEMEM Config_Data_Container_t container = {
                    .
    config = {
                        .
    foo 42 // Beispielinitialisierung
                        
    }, };

    Config_Data_t * const config = &container.config
    Anwendungsbeispiel
    PHP-Code:
    #include "config.h"
    #include <avr/eeprom.h>

    eeprom_read_word(&config->foo
    Erklärung: Config_Data_Container_t belegt den ganzen EEPROM. Vollständig. Das erste Byte wird ausgespart (angeblich kann es ungewollt bei Ausfällen der Stromversorgung o.ä. überschrieben werden), den Rest hinter der eigentlichen Nutzdatenstruktur belegt ein Dummy-Array. Dadurch bleibt die Adresse der Daten immer gleich da der Compiler gar keinen Spielraum zum umorganisieren hat, außer man nimmt selbst Änderungen vor. Auf die Daten zugreifen kann man über einen Pointer der direkt auf den Anfang der Nutzdaten zeigt. Müssen die Daten nicht vorinitialisiert werden, kann auf den entsprechenden Abschnitt in config.c verzichtet werden.

    @sast: Die Reihenfolge in der die Variablen im Speicher liegen kannst du nicht beeinflussen, das gilt für den RAM genauso wie für den EEPROM. Wenn du ein sicheres Speicherlayout haben möchtest, musst du das ganze als struct ablegen.

    mfG
    Markus
    Geändert von markusj (12.01.2013 um 16:22 Uhr) Grund: Hinweis zum Sourcefile entfernt
    Tiny ASURO Library: Thread und sf.net Seite

Berechtigungen

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

12V Akku bauen