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