WINAVR - prekvapiva optimalizace

Marek Sembol hwm.land@gmail.com
Pátek Prosinec 12 10:58:10 CET 2008


Čo si také predstavítě pod pojmom „kratsí", Kefalín?
Kratsi == mene bytu nebo kratsi == rychlejsi vykonani (kratsi cas)?

Prvni co by se mel clovek u C naucit je to, ze s dnesni urovni
prekladacu a optimalizace je naprosto zbytecne naznacovat 'jak ma neco
prelozit' To co prekladac provedl je mimochodem ucebnicova ukazka
optimalizace cyklu.
Prekladac si sam rozhodne zda nejakou promennou vynecha (ci si
pripadne prida vlastni pomocnou)

Navic kdyz uz chcete prekladaci naznacovat, naznacujte lepe:
   for (idx=DsTSensCount; idx != 0; idx--)
   {
    pd++->status = TSENS_ERR_HW;
   }

S pozdravem
Marek
PS: hned druhe co by se clovek mel naucit, ze se s optimalizaci ne
vzdy rozhodne spravne:)


On Fri, Dec 12, 2008 at 10:41 AM, Jaroslav Buchta
<jaroslav.buchta@gmail.com> wrote:
> Zdravim,
> ted me dostala optimalizace casti kodu, kterou jsem necekal...
>
>    BYTE idx;
>    PDS18X20_DESC pd = &DsTSensDesc[0];
>    for (idx=0; idx<DsTSensCount; idx++)
>    {
>     pd++->status = TSENS_ERR_HW;
>    }
> je prelozeno takto:
>
>    BYTE idx;
>    PDS18X20_DESC pd = &DsTSensDesc[0];
>    for (idx=0; idx<DsTSensCount; idx++)
>  bee: 90 91 78 02  lds r25, 0x0278
>  bf2: e0 e0        ldi r30, 0x00 ; 0
>  bf4: f2 e0        ldi r31, 0x02 ; 2
>  bf6: 8c e0        ldi r24, 0x0C ; 12
>  bf8: 98 9f        mul r25, r24
>  bfa: c0 01        movw r24, r0
>  bfc: 11 24        eor r1, r1
>  bfe: 8e 0f        add r24, r30
>  c00: 9f 1f        adc r25, r31
>    {
>     pd++->status = TSENS_ERR_HW;
>  c02: 21 e0        ldi r18, 0x01 ; 1
>  c04: 02 c0        rjmp .+4       ; 0xc0a <TSens_SrvFunc+0x46>
>  c06: 23 87        std Z+11, r18 ; 0x0b
>  c08: 3c 96        adiw r30, 0x0c ; 12
>   wStartTicks = GetTicks1ms();
>   if (bRes != DS18X20_OK)
>   {
>    BYTE idx;
>    PDS18X20_DESC pd = &DsTSensDesc[0];
>    for (idx=0; idx<DsTSensCount; idx++)
>  c0a: e8 17        cp r30, r24
>  c0c: f9 07        cpc r31, r25
>  c0e: d9 f7        brne .-10      ; 0xc06 <TSens_SrvFunc+0x42>
>  c10: 30 c0        rjmp .+96      ; 0xc72 <TSens_SrvFunc+0xae>
>
> (prolozeni textu je trosku ujete, pointa je v tom, ze se prekladac uplne
> vyhne pouziti promenne idx a ukonceni cyklu provede na zaklade porovnani
> ukazatele na strukturu s max. hodnotou (pocet polozek je na adrese 0x278) Je
> to evidentne funkcni a logicke, rekl bych ale, ze s pouzitim idx by kod
> vysel kratsi, coz byl muj zamer...)
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>


Další informace o konferenci Hw-list