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