Re: pøeteèení int v C arduino

Jan Waclawek konfera na efton.sk
Pátek Červenec 18 19:01:08 CEST 2014


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 at seznam.cz>
   Date: Fri, 18 Jul 2014 17:40:16 +0200
     To: HW-news <hw-list at 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
>
>On 07/18/2014 05:29 PM, Petr Zapadlo wrote:
>> Dìkuji za detailní vysvìtlení.
>> Zatím jsem psal jen  v asembleru a tam jsem si "datové typy" hlídal
>> striktnì ruènì.
>> Tady se mi zalíbila volnost rozletu a "automatika" a u¾ jsem na to
>> dojel :-)
>>
>> Petr
>_______________________________________________
>HW-list mailing list  -  sponsored by www.HW.cz
>Hw-list at list.hw.cz
>http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list