C optimalizalas
Fuzesi Arnold
arno at externet.hu
Fri Oct 28 12:24:03 CEST 2005
Semmi ertelme nincs, csak amiatt volt hogy átlássam a működését rendesen,
illetve idővel egyszerűsödött le ennyire.
Aztan mikor végeztem, optimalizalni akartam ezeket magam, kezzel ahogy Te is
mondod (mert ugye nincs ertelme), akkor meglepodve tapasztalom hogy a
kodmeret megnőtt.
Most megint más az eredmeny. :))
Alakítottam a programon jelentéktelent (semmit nem adtam hozza/vettem el
asszem, csak rendezgettem a dolgokat ha kesobb ranezek egyből értsem), és
8123 az eredeti a 8111 helyett ami tegnap volt.
Az említett részhez nem is nyúltam.
Ha most illesztem be amit irtal, akkor
8117 lesz.
Most rövidebb.
Amugy ezzel a beallitassal lesz a legkisebb a kod.
Full max optimalzacio 2-es crosscall melyseg.
Ha kiveszem a code motiont 8192+14 byte lesz a kod. Nem fér már bele.
3-as crosscall melyseggel is csak 8113-ra megy le, de az eredeti 8111-et nem
tudom ma kicsikarni belőle.
De 2-nél többel nem szeretek jatszani, stack-et ott mar nehez kezben
tartani.
Unlimited cross call melysegnel marad a 8113 byte.
Uhh, ilyen drága 10byte-om még nem volt.. mint ezek most. Már vagy egy órát
elcsámcsogtam rajtuk. :)
Arnold
----- Original Message -----
From: "Mikó Imre" <imre.miko at siemens.com>
To: <elektro at tesla.hu>
Sent: Friday, October 28, 2005 11:53 AM
Subject: RE: C optimalizalas
Hello,
Igazabol nem ertem ennek az if-nek mi ertelme van:
if(cfg.out_retrigger){
settimer(TMR_MONOSTABLE,cfg.out_type);
cfg.hangup_status=ACTIVE;
}else{
settimer(TMR_MONOSTABLE,cfg.out_type);
cfg.hangup_status=ACTIVE;
}
Ezt szerintem siman kioptimalizalja, hiszen mindket aga
azonos. A lenyeg szerintem ott van, hogy a
cfg.hangup_status=ACTIVE;
a vegere kerul. Lehet, hogy van masik fuggvenyed, is aminek
ez a vegere kerul. A Cross Call-nak ez a kedvezobb.
Mi van ha ezt irod:
if(!cfg.out_type){
PORT3_OC1B=1;
}
else{
settimer(TMR_MONOSTABLE,cfg.out_type);
}
cfg.hangup_status=ACTIVE;
Ja es mindent bekapcsolsz, min meretre az nem feltetlen adja a min meretet.
En kiserleteztem, neha van olyan opcio, ami miatt megis nagyobb lesz a kod.
Persze ez nagyon fugg a tenyleges programtol.
Van itt egy progi, ami full size, + az enabled optimalizacional mindent
bepipalva 3932 byte.
Ugyanez, ha kiveszem a Code motiont, es minden mas valtozatlan, akkor meg
3842.
Udv
Imre
-----Original Message-----
From: elektro-bounces at tesla.hu [mailto:elektro-bounces at tesla.hu] On Behalf
Of Fuzesi Arnold
Sent: 2005.október 27. 21:15
To: elektro at tesla.hu; Retro at lists.tmp.hu
Subject: C optimalizalas
Belefutottam egy jopofa dologba:
Az alabbi jocskan _rovidebb_ kodot eredmenyez:
if(!cfg.out_type){
PORT3_OC1B=1;
cfg.hangup_status=ACTIVE;
}
else{
if(cfg.out_retrigger){
settimer(TMR_MONOSTABLE,cfg.out_type);
cfg.hangup_status=ACTIVE;
}else{
settimer(TMR_MONOSTABLE,cfg.out_type);
cfg.hangup_status=ACTIVE;
}
}
mint ez:
cfg.hangup_status=ACTIVE;
if(!cfg.out_type){
PORT3_OC1B=1;
}
else{
settimer(TMR_MONOSTABLE,cfg.out_type);
}
Elvben funkcionalisan megegyeznek.
Csak egy jopofa pelda akart lenni, hogy forditok mennyire maskepp
gondolkodnak mint az ember, és bizonyos komplexitas felett mennyire nincs
eselyünk.
Azert lett rovidebb mert tök mashol hasznaltam azonos kodreszletet(ket),
amit a cross-call optimalizacio megtalalt, es csinalt egy par kis közös
fuggvenyt
Nezegettem a kodot, tele van cross-call hivassal... Nagyon ugyesen
megtalalja a kozos kodreszeket. Ott ahol nekem fel sem tűnne/
lustaságból/átláthatóság miatt nem kezdenék függvényhívást írni.
Arnold
-----------------------------------
Szponzorunk: http://tonerbolt.hu/
-----------------------------------
Szponzorunk: http://tonerbolt.hu/
More information about the Elektro
mailing list