www.mikrocontroller.net

Forum: Compiler & IDEs struct im eeprom und ram


Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
habe mir eine struct im eeprom erstellt und für den einfacheren zugriff
habe ich dafon eine copy ins ram gelegt.
nun möchte ich diese copy des struct aus dem ram auch in einer
anderen funktion (datei) sichtbar machen.
habe bei datei test2 das problem, dass das struct im ram nicht sichtbar
ist.
hier liegt das problem :     extern eeprom_data ee_buf;

datei test1.c
#include <avr\iom16.h>
#include <avr\eeprom.h>c

  //struct im EEPROM
typedef struct
  {
    char wert1;
    char wert2;
    char wert3;
  }eeprom_menue;

    //EEPROM-Daten definieren
eeprom_menue eeprom_data _attribute_ ((section(".eeprom")));

typedef struct
  {
    char wert1;
    char wert2;
    char wert3;
  }eeprom_menue_spiegel;

    //EEPROM-Daten definieren
eeprom_menue_spiegel eeprom_data_spiegel _attribute_
((section(".eeprom")));

// RAM-Kopie für einfacheren Zugriff definieren
eeprom_menue ee_buf;

  char Stoerung;
  char dummy;

extern void test(void);


void main(void)
{
  eeprom_read_block(&ee_buf, &eeprom_data, sizeof(ee_buf));  //Daten vom
Eeprom ins Ram schreiben
  ee_buf.wert1 = 1;
  if(bit_is_clear(EECR, EEWE))
  {
    eeprom_write_byte ((unsigned char *)(&eeprom_data.wert1), (unsigned
char)(ee_buf.wert1));
  }
  if(bit_is_clear(EECR, EEWE))
  {
    eeprom_write_byte ((unsigned char *)(&eeprom_data_spiegel.wert1),
(unsigned char)(ee_buf.wert1));
  }
  ee_buf.wert2 = 10;
  if(bit_is_clear(EECR, EEWE))
  {
    eeprom_write_byte ((unsigned char *)(&eeprom_data.wert2), (unsigned
char)(ee_buf.wert2));
  }
  ee_buf.wert3 = 10;
  if(bit_is_clear(EECR, EEWE))
     {
    eeprom_write_byte ((unsigned char *)( &eeprom_data.wert3),(unsigned
char)(ee_buf.wert3));
  }

  test();

  do
  {
  eeprom_read_byte ((unsigned char *)(&eeprom_data.wert1));
  }
  while(!(eeprom_is_ready()));
  dummy = EEDR;
  if(dummy == ee_buf.wert1)
  {
  do
  {
  eeprom_read_byte ((unsigned char *)(&eeprom_data.wert2));
  }
  while(!(eeprom_is_ready()));
         dummy = EEDR;
    if(dummy == ee_buf.wert2)
     {
    do
   {
  eeprom_read_byte ((unsigned char *)(&eeprom_data.wert2));
    }
       while(!(eeprom_is_ready()));
       dummy = EEDR;
       if(dummy == ee_buf.wert3)
      {
      Stoerung = 0;
      }
      else
           {
       Stoerung = 1;
     }
    }
   else
   {
          Stoerung = 1;
   }
  }
  else
  {
    Stoerung = 1;
  }
}

hier volgt datei test2.c
#include <avr\iom16.h>
#include <avr\signal.h>
#include <avr\eeprom.h>

extern struct
  {
  char wert1;
  char wert2;
  char wert3;
  }eeprom_data;

extern struct
  {
  char wert1;
  char wert2;
  char wert3;
  }eeprom_data_spiegel;

// RAM-Kopie für einfacheren Zugriff definieren
extern eeprom_data ee_buf;
***********habe probleme beim definieren des struct im ram*********

  extern char dummy;
  extern char Stoerung;

  void test(void)
  {
    do
    {
      eeprom_read_byte ((unsigned char *)(&eeprom_data_spiegel.wert1));
    }
    while(!(eeprom_is_ready()));
    dummy = EEDR;
    if(dummy == ee_buf.wert1)
    {
    Stoerung=1;
    }
  }




grüße
  jack

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
habe die lösung gefunden, man muss das struct im ram definieren.
extern struct
  {
    char wert1;
    char wert2;
    char wert3;
  }ee_buf;

grüße
  jack

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.