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