pøeteèení int v C arduino
Miroslav Mraz
mraz na seznam.cz
Pátek Červenec 18 19:46:45 CEST 2014
Jasně, to se musí doladit, chtěl jsem naznačit ten podíl a zbytek jednou
operací. I když už jsem se setkal s tím, že div v nějaké verzi newlib to
stejně fyzicky dělil nadvakrát.
Mrazík
Jan Waclawek píše v Pá 18. 07. 2014 v 19:01 +0200:
> Ale to funguje len do 32767 sekund, co nie je ani 10 hodin, co bol ten
> povodny priklad... Cize treba pouzit ldiv.
>
> Naviac, ako som bol pisal, avr-gcc od 4.5 vie optimalizovat dvojicu za
> sebou nasledujuceho divu a modu na jedno volanie divmod funkcie, takze to
> div tak trocha straca opodstatnenie.
>
> void ctime2 (uint32_t t, mtime_t* s) {
> s->s = t % 60;
> t = t / 60;
> s->m = t % 60;
> t = t / 60;
> s->h = t % 24;
> s->d = t / 24;
> }
>
> Ak by sa malo naozaj optimalizovat, tak treba napisat rucne divmod 32/8 do
> inline assembleru.
>
> wek
>
>
> ----- Original Message ---------------
>
> Subject: Re: pøeteèení int v C arduino
> From: Miroslav Mraz <mraz na seznam.cz>
> Date: Fri, 18 Jul 2014 17:40:16 +0200
> To: HW-news <hw-list na list.hw.cz>
>
> >Mo¾ná by to ¹lo jednodu¹eji nìjak takto:
> >
> >#include <stdlib.h>
> >
> >typedef struct {
> > uint8_t d;
> > uint8_t h;
> > uint8_t m;
> > uint8_t s;
> >} mtime_t;
> >// prevod
> >void ctime (int t, mtime_t* s) {
> > div_t r;
> > r = div (t, 60);
> > s->s = r.rem;
> > t = r.quot;
> > r = div (t, 60);
> > s->m = r.rem;
> > t = r.quot;
> > r = div (t, 24);
> > s->h = r.rem;
> > // tohle patrne pretece, ale asi je to jedno
> > s->d = r.quot;
> >}
> >
> >Mrazík
> >
> >
Další informace o konferenci Hw-list