funkce v C - proč to nechodí

Petr Zapadlo zapik na email.cz
Úterý Prosinec 29 19:10:59 CET 2015


Zdravím,

hraji s hodinami v arduinu a mám takovou poměrně jednoduchou funkci:


unsigned long nactialarm ()
{

   return ((EEPROM.read (alarmclock + 2) * 65536) +
       (EEPROM.read (alarmclock + 1)) * 256 + (EEPROM.read (alarmclock)));
}


tato by měla vracet hodnotu uloženou v eeprom (3 byte). Ale chová se 
velmi podivně.
pokud je hodnota na adrese (alarmclock + 1)  vyšší než určitá hodnota ( 
mám otestováno od 250), tak návratová hodnota funkce je cca 4294937760 
(pokaždé stejná).
Pokud je hodnota na adrese nízká, pak je výsledek očekávaný. nepochopil 
jsem proč.
Přepsal jsem to takhle:
unsigned int alarm2 =  EEPROM.read (alarmclock + 2);
   unsigned int alarm1 = EEPROM.read (alarmclock + 1);
   unsigned int alarm0 = EEPROM.read (alarmclock);
   alarm=alarm2*65536+alarm1*256+alarm0;
A to chodí jak má.
Hodnoty v eeprom jsou korektní, obsah eeprom je v pořádku.

Čím to je?

Díky

Petr


Další informace o konferenci Hw-list