а вы обратили внимание что там нет флоата?
эти переменные сейчас это eeprom char ee_clocks[4]!!!
вот если бы вместо этого изврата поставить сразу флоат....
лонг кстати пишет нормально...4 байта...
наверное переустановлю свою кодвижну....и буду таки уходить от флоатов...много они памяти жрут...особенно их вывод на экран...
так то через унион у меня всё получилось и работает...но....пришло время немного экономить каждый байт...вчера вон не меняя вообще логики программы сэкономил 4 процента флеши...было 100% занято а сейчас 97

но если уйти из флоата то было бы очень хорошо....
просто интересно почему и только ли это у меня запись eeprom float a=8000000; превращается в какой-то бред а когда потом копируеш это значвение в РАМовский буффер float b=a; то в b потом получается какой-то бред несусветный...
сейчас делаю вот так
Код: Выделить всё
union{
float f;
char c[4];
}uf;
eeprom unsigned char FirstPower = 0;
eeprom char eep_ClocksPerSec[4];
float ClocksPerSec;
процедурки для чтения и записи флоата в/из еепром
Код: Выделить всё
float readfeep(eeprom char *ch)
{
for(a=0;a<=4;a++)
uf.c[a]=ch[a];
return uf.f;
}
void writef(eeprom char *ch, float f)
{
uf.f = f;
for(a=0;a<=4;a++)
ch[a] = uf.c[a];
}
потом инициализирую при первом запуске
Код: Выделить всё
if(FirstPower!=132)
{
// первый запуск
FirstPower = 132;
writef(eep_ClocksPerSec, 8000000.0);
}
ClocksPerSec = readfeep(eep_ClocksPerSec);