Forum: Compiler & IDEs struct im eeprom und ram


von jack (Gast)


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

von jack (Gast)


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

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.