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