WINAVR - prekvapiva optimalizace
Ondrej
leguanolog@seznam.cz
Pátek Prosinec 12 13:19:06 CET 2008
No tak zkuste dát jiný typ optimalizace (třeba s nebo 0) a co to provede
potom.
OH
Jaroslav Buchta napsal(a):
> No, ja uz se naucil I 3. pravidlo, ze zadny prekladac neni dokonaly a obcas
> neco prelozi I uplne blbe :-) Zvlast tem pro MCU neverim dokud preklad
> nevidim.
> A kratsi jsem myslel na pocet instrukci, tady neni rychlost dulezita. Ale I
> na rychlost by to IMHO vyslo podstatne lepe s pouzitim promenne typu BYTE
> pro pocitani iteraci cyklu. Adresa by se jen pricitala, nemusela by se
> porovnavat v 16b forme a pripravovat koncova adresa dalsimi x instrukcemi.
> Takze v tomto pripade optimalizaci nepovazuji za zdarilou.
>
> -----Original Message-----
> From: hw-list-bounces@list.hw.cz [mailto:hw-list-bounces@list.hw.cz] On
> Behalf Of Marek Sembol
> Sent: Friday, December 12, 2008 10:58 AM
> To: HW-news
> Subject: Re: WINAVR - prekvapiva optimalizace
>
>
> Č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
>>
>>
>>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>
--
Jabber: Iguaner@jabber.cz
ICQ: 122712466
---------------------------------------------------
| |
| IKORAS - My home-made MP3 player |
| http://ikoras.iglu.cz |
| |
---------------------------------------------------
Další informace o konferenci Hw-list