Ja to widzę tak (i sądzę że w tych linijkach siedzi problem ) nie mam atmegi 8 i nie mam możliwości sprawdzić .
chodzi mi o struktury takie jak
main.c
Kod:
// inicjalizacja ustawień fabrycznych w pamięci Flash * ? a gdzie dane zapisane do struktury? *
const TCFG pgm_cfg __attribute__((__progmem__))={
Thw,
Thz,
}; * tu napisze dalej w opisie *
* te 2 linie pominę one powinny być raczej w camoon.h *
TCFG eem_cfg EEMEM; // dane w pamięci EEPROM
TCFG ram_cfg;
common.c
Kod:
typedef struct {
uint8_t thw;
uint8_t thz;
} TCFG;
// ustawienia domylne (fabryczne)
#define Thw 6 // * coś tu chyba nie tak jest? *
#define Thz 12 // * coś tu chyba nie tak jest? *
a czy deklaracja z main.c nie powinna być w common.h ?
a w miejsce linijek które mogą ci mieszać i to bardzo w kodzie
nie lepiej w strukturze umieszczonej w PROGMEM zapisać na stałe te wartości zamiast
Kod:
#define Thw 6
#define Thz 12
przecież i tak nie masz możliwości ich zmiany ? a po
Kod:
void check_and_load_defaults( void ) {
uint8_t i, len = sizeof( ram_cfg );
uint8_t * ram_wsk = (uint8_t*)&ram_cfg;
copy_eem_to_ram();
for(i=0; i<len; i++) {
if( 0xff == *ram_wsk++ ) continue;
break;
}
if( i == len ) {
load_defaults(); * chodzi mi o to co tu się wyrabia :) *
}
}
a dokładniej TU
Kod:
void load_defaults( void ) {
copy_pgm_to_ram(); * OO tu tu *
copy_ram_to_eem();
}
czym zapełniasz dane z pgm ? przecież w odwołaniach do struktur pre-procesor już ci po podmieniał dane po # definach
// *** Pomieszał a ja jeszcze bardziej ***//

dopiero zauważyłem pomylone opisy plików common.c <-> common.h
nie będę zmieniał tylko 1 linijkę wrzucę
Kod:
extern const TCFG pgm_cfg __attribute__((__progmem__)); // dane w pamięci FLASH
a skąd ci się to wzięło ?
nie # include main.c skąd ma wiedzieć kompilator co to jest ?
rozumiał bym jak by struktura była w cammon.c zamiast w main.c
Według mnie tu masz takie zagwozdki które mogą powodować małe / lub / spore kłopoty sprawdź je reszta niby ok
nie mam procka ani bibliotek ds18b20 do których się odwołujesz