Optimalizace kodu
Michal HW
michalgregor@centrum.cz
Čtvrtek Leden 4 09:14:56 CET 2007
No s temi pointry to neni zadna vyhra.
PIC ma FSR registry pro pristup do vnitrni pameti
a TPLTR pro externi.
Takze:
pe=data_externi;
pi=data_interni;
for (i=64;i;i--){
*pe=*pi;
pe++;
pi++;
}
pe - tri byte
pi - dva byte
Vysledek - telo cyklu
1) TPLPTR=pe
2) FSRx=pi
3) ++pe
4) ++pi
5) *TPLPTR=*FSR
Je to docela dlouhy kod, kdezto kopirovani structury tvori tri instrukce.
Michal Gregor
----- Original Message -----
From: "Milan" <milger@pobox.sk>
To: "HW-news" <hw-list@list.hw.cz>
Sent: Wednesday, January 03, 2007 7:25 PM
Subject: Re: Optimalizace kodu
Praca s poliami je prehladna ale nie je optimalna. Kompilatory pocitaju
pointre /ukazatele/, dan za univerzalnost.
Skus najskor naplnit vlasne pointere, v cykle ich dekrementovat /resp.
inkrementovat/ a cez tieto pointere pristupovat k datam.
Urcite to bude optimalnejsie.
To je obecne pravidlo, neviem nic o HT-Soft + 18F8722
Milan
----- Original Message -----
From: "Michal HW" <michalgregor@centrum.cz>
To: "HW-News" <hw-list@list.hw.cz>
Sent: Wednesday, January 03, 2007 3:31 PM
Subject: Optimalizace kodu
Pracuji na vetsim SW v C - HT-Soft + 18F8722.
Pokud presunuji structury z vnitrni RAM do externi, kompilator z toho udela
par radku kodu:
Structura_Externi=Structura_Vnitrni;
Ale pokud totez udelam s polem rucne:
for (Pocet_B=63;Pocet_B!=255;--Pocet_B) {
Data_Externi[Pocet_B]=Data_Vnitrni[Pocet_B];
}
vznikne monstrozni kod. Pokazde se pocita HW ukazatel(TBLPTR) pro externi a
vnitrni pamet.
Lze to optimalizovat v C kodu bez nutnosti zmeny datovych structur?
Nebo mam zmenit pole na structury?
Jak to optimalizuji jine kompilatory?
Michal Gregor
_______________________________________________
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
Další informace o konferenci Hw-list