<div>Zkusil bych 65536L nebo pretypovat navratovou hodnotu .read na unsigned long.<br/>
L.<br/>
<br/>
--<br/>
Stručně naklofáno na mobilu<br/><br/>-----Original Message-----<br/>From: Petr Zapadlo <zapik@email.cz><br/>To: "hw-list@list.hw.cz >> HW-news" <hw-list@list.hw.cz><br/>Sent: út, 29 pro 2015 19:11<br/>Subject: funkce v C - proč to nechodí<br/><br/></div>Zdravím,
<br/>
<br/>
hraji s hodinami v arduinu a mám takovou poměrně jednoduchou funkci:
<br/>
<br/>
<br/>
unsigned long nactialarm ()
<br/>
{
<br/>
<br/>
return ((EEPROM.read (alarmclock + 2) * 65536) +
<br/>
(EEPROM.read (alarmclock + 1)) * 256 + (EEPROM.read (alarmclock)));
<br/>
}
<br/>
<br/>
<br/>
tato by měla vracet hodnotu uloženou v eeprom (3 byte). Ale chová se
<br/>
velmi podivně.
<br/>
pokud je hodnota na adrese (alarmclock + 1) vyšší než určitá hodnota (
<br/>
mám otestováno od 250), tak návratová hodnota funkce je cca <a href="tel:4294937760">4294937760</a>
<br/>
(pokaždé stejná).
<br/>
Pokud je hodnota na adrese nízká, pak je výsledek očekávaný. nepochopil
<br/>
jsem proč.
<br/>
Přepsal jsem to takhle:
<br/>
unsigned int alarm2 = EEPROM.read (alarmclock + 2);
<br/>
unsigned int alarm1 = EEPROM.read (alarmclock + 1);
<br/>
unsigned int alarm0 = EEPROM.read (alarmclock);
<br/>
alarm=alarm2*65536+alarm1*256+alarm0;
<br/>
A to chodí jak má.
<br/>
Hodnoty v eeprom jsou korektní, obsah eeprom je v pořádku.
<br/>
<br/>
Čím to je?
<br/>
<br/>
Díky
<br/>
<br/>
Petr
<br/>
_______________________________________________
<br/>
HW-list mailing list - sponsored by <a href="http://www.HW.cz">www.HW.cz</a>
<br/>
<a href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<br/>
<a href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
<br/>