Zapis danych z własnej struktury do eeprom

Tu możesz pisać o swoich problemach z pisaniem programów w języku C dla AVR.
Awatar użytkownika
danielos
Newb
Newb
Posty: 70
Rejestracja: sobota 02 sty 2016, 15:06
Lokalizacja: Pawłowice, Silesia.
Kontaktowanie:

Zapis danych z własnej struktury do eeprom

Postautor: danielos » niedziela 21 lut 2016, 20:15

Witam.

Utworzyłem taką o to strukturę:

Kod: Zaznacz cały

typedef struct{
   uint8_t active_out;         //czy wyjscie jest aktywne
   char name_out[9];
   uint8_t type_event;
   DS_TYPE_TIME out_time[2];      //dane dla czasu 1 i 2
   DS_TYPE_TEMP out_temp;         //dane dla temperatury
   uint8_t range_in;            //dane dla sygnału wejsciowego
}DS_OUT_CONF;


Oraz powołałem do życia 3 zmienne:

Kod: Zaznacz cały

extern DS_OUT_CONF pgm_out_conf[] PROGMEM;         // dane w pamięci FLASH
extern DS_OUT_CONF eem_out_conf[] EEMEM;         // dane w pamięci EEPROM
extern DS_OUT_CONF ram_out_conf[];               // dane w pamięci RAM


Przy próbie wykonania takich operacji:

Kod: Zaznacz cały

eeprom_read_block( &ram_out_conf, &eem_out_conf, sizeof(ram_out_conf) );
eeprom_write_block( &ram_out_conf, &eem_out_conf, sizeof(ram_out_conf) );
memcpy_P( &ram_out_conf, &pgm_out_conf, sizeof(pgm_out_conf) );


wyskakuje mi następujący błąd:

Kod: Zaznacz cały

error: invalid application of 'sizeof' to incomplete type 'struct DS_OUT_CONF[]'


Wspomnę też, że inna struktura którą utworzyłem nie powoduje błędów.

Co może być problem.
Próbowałem już sam rozwiązać to, lecz skończyły mi się pomysł gdzie może być problem.
Można wszystko osiągnąć, wystarczy chcieć.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1177
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: Zapis danych z własnej struktury do eeprom

Postautor: Antystatyczny » niedziela 21 lut 2016, 20:21

Ja bym się raczej posługiwał nazwą typu zamiast nazwą zmiennej, ale nie wiem, czy to rozwiąże problem. A zatem zamiast sizeof(pgm_out_conf) uzyłbym sizeof(DS_OUT_CONF)
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
danielos
Newb
Newb
Posty: 70
Rejestracja: sobota 02 sty 2016, 15:06
Lokalizacja: Pawłowice, Silesia.
Kontaktowanie:

Re: Zapis danych z własnej struktury do eeprom

Postautor: danielos » niedziela 21 lut 2016, 20:23

Aż się wstyd przyznać, za taki błąd.

Zapomniałem uzupełnić rozmiar tablicy zmiennych które utworzyłem w pliku nagłówkowym.

Miało być:

Kod: Zaznacz cały

extern DS_OUT_CONF pgm_out_conf[8] PROGMEM;         // dane w pamięci FLASH
extern DS_OUT_CONF eem_out_conf[8] EEMEM;         // dane w pamięci EEPROM
extern DS_OUT_CONF ram_out_conf[8];               // dane w pamięci RAM


Po wpisaniu rozmiaru problem znikł.
To już chyba przemęczenie, że taki szkolny błąd.

Sorry za zamieszanie;)
Można wszystko osiągnąć, wystarczy chcieć.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1177
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: Zapis danych z własnej struktury do eeprom

Postautor: Antystatyczny » niedziela 21 lut 2016, 20:24

Spoko... ja też tego nie widziałem :)
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
danielos
Newb
Newb
Posty: 70
Rejestracja: sobota 02 sty 2016, 15:06
Lokalizacja: Pawłowice, Silesia.
Kontaktowanie:

Re: Zapis danych z własnej struktury do eeprom

Postautor: danielos » niedziela 21 lut 2016, 20:29

A wszystko przez to, że w tej głównej strukturze umieściłem tablicę innej struktury. Bo po zmianie tamtej tablicy na dwie zmienne nie było problemu. Tylko, że dwie zmienne mi nie odpowiadały - trudniejszy dostęp, niż do tablicy (bardziej by mi to skomplikowało kod).
Można wszystko osiągnąć, wystarczy chcieć.

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1177
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: Zapis danych z własnej struktury do eeprom

Postautor: Antystatyczny » niedziela 21 lut 2016, 20:30

A zwróciłem uwagę w definicji typu złożonego na to, czy są wpisane rozmiary tablic... a niżej już nie spojrzałem.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.


Wróć do „Programowanie AVR w C”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości