Re: funkce v C - proč to nechodí
spam na nagano.cz
spam na nagano.cz
Úterý Prosinec 29 19:22:28 CET 2015
Zkusil bych 65536L nebo pretypovat navratovou hodnotu .read na unsigned long.
L.
--
Stručně naklofáno na mobilu
-----Original Message-----
From: Petr Zapadlo <zapik na email.cz>
To: "hw-list na list.hw.cz >> HW-news" <hw-list na list.hw.cz>
Sent: út, 29 pro 2015 19:11
Subject: funkce v C - proč to nechodí
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
_______________________________________________
HW-list mailing list - sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20151229/6b1532c1/attachment.html>
Další informace o konferenci Hw-list