Re: funkce v C - proč to nechodí

Petr Zapadlo zapik na email.cz
Úterý Prosinec 29 19:30:44 CET 2015


Právě že ten problém nezpůsobuje nenulový nejvyšší  bajt, ale ten 
prostřední pokud se blíží 250 (přesnou hodnotu jsem nezjišťoval)
návratová hodnota je  unsigned long - takže bezpečně velká.

já si nějak na uintxxx nějak nemůžu zvyknout.

Petr

Dne 29.12.2015 v 19:25 Jaroslav Buchta napsal(a):
> EEPROM.read ma predpoklada navratovou hodnotu 8 bitu, IMHO by to melo 
> fungovat po pretypovani:
>
>   return (((unsigned int)EEPROM.read (alarmclock + 2) * 65536) +
>       ((unsigned int)EEPROM.read (alarmclock + 1)) * 256 + ((unsigned 
> int)EEPROM.read (alarmclock)));
>
> Ale nevim, jestli je int 16 nebo 32b u arduina, tipuju spis 16, pak 
> bude problem u prvniho clenu pokud bude nenulovy...
> Lepsi je pouzivat std. int typy uint8_t, uint16_t...pak je kod dobre 
> prenositelny.
>
>
> Dne 29.12.2015 v 19:10 Petr Zapadlo napsal(a):
>> 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
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list