<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/>