Programovani v C

Snail Instruments snail
Středa Březen 17 12:05:07 CET 2004


K rozdilne delce kodu - programator pisici v Cecku nemysli na detaily,
ktere jsou v assembleru vice videt. To se potom musi odrazit i ve spotrebe
vsech druhu pameti.

Napriklad:
Nejaka cinnost se ma provest pri kazdem ctvrtem pruchodu hlavni smyckou
programu. V Cecku napiseme

static unsigned char counter=0;
counter++;
if(counter==4){
  counter=0;
  spust_cinnost();
};
Coz se zrejme prelozi
  incf counter,f
  movf couter,w
  sublw 0x04
  btfss status,zero
  goto lbl0
  clrf counter
  call spust_cinnost
lbl0:

V assembleru ovsem napiseme snadno kratsi kod:
  incf counter,f
  btfss counter,2
  goto lbl0
  bcf counter,2
  call spust_cinnost
lbl0:

I kdyby snad nekoho napadlo psat v Cecku nasledujici, neni vubec jiste,
jestli kompilator 'pochopi' jak to efektivne prelozit.
counter++;
if(counter&0x04){
  counter &= ~0x04;
  spust_cinnost();
}

J. Hanzal

>>A co se tyce optimalizace: slusne napsany program v 'C' se zapnutou
>>optimalizaci dosahuje v porovnani
>>s assemblerem tak 150% v delce kodu, 120% ve spotrebe pameti a >130% v
>>narocnosti na stack.
>
>Neviem presne, ci to je tak ako pisete, ja osobne robim s Picom. Z toho co 
>som robil, je jednoznacne najlepsie pouzivat PicC pretoze kod, ktory 
>generuje tento kompilator je naozaj spickovy (lepsie to nenapisete ani v 
>asm) a funguje tam aj to, ze ked nevypadne optimalny kod direkt z 
>kompilatora, tak to ide cez modifikaciu zdrojoveho kodu. To co ste napisal 
>plati asi zrejme pre Keil.






Další informace o konferenci Hw-list