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