Re: funkce v C - proč to nechodí
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Úterý Prosinec 29 19:25:28 CET 2015
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
Další informace o konferenci Hw-list