Programovani v C
Andy Jancura
andy_jancura
Středa Březen 17 12:05:06 CET 2004
Ahoj,
>From: Snail Instruments <snail@iol.cz>
>Reply-To: hw-news@list.gin.cz
>To: Multiple recipients of list <hw-news@list.gin.cz>
>Subject: Re: Programovani v C
>Date: Tue, 20 Feb 2001 09:55:35 +0100
>
>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:
tot zdrojak:
void spusti_cinnost(void)
{
}
main()
{
unsigned char counter =0;
counter++;
if(counter & 0x04)
{
counter = 0;
spusti_cinnost();
}
}
a tot kod:
global ?a_main
global _main
signat _main,66
FNSIZE _main,1,0
FNCALL _main,_spusti_cinnost
global _spusti_cinnost
signat _spusti_cinnost,88
global start
processor 16F84A
psect text0,local,class=CODE,delta=2
psect text1,local,class=CODE,delta=2
file "C:\WINDOWS\TEMP\$$018622.000"
psect text0
file "C:\PICCLITE\BIN\POKUSHW.C"
line 5
_main
; _counter assigned to ?a_main+0
_main$counter set ?a_main
line 6
;C:\PICCLITE\BIN\POKUSHW.C: 6: unsigned char counter =0;
clrf ?a_main
line 8
;C:\PICCLITE\BIN\POKUSHW.C: 8: counter++;
incf ?a_main
line 9
;C:\PICCLITE\BIN\POKUSHW.C: 9: if(counter & 0x04)
btfss ?a_main,2
goto l1
line 11
;C:\PICCLITE\BIN\POKUSHW.C: 10: {
clrf ?a_main
line 12
;C:\PICCLITE\BIN\POKUSHW.C: 12: spusti_cinnost();
bcf 3,5
fcall _spusti_cinnost
line 14
;C:\PICCLITE\BIN\POKUSHW.C: 13: }
l1
ljmp start
Rozdiel medzi Tvojim a tymto je len v tom, ze su tam este inicializacia
premennej a nastavenie banky pred call, co je vhodne zase z inych dovodov.
Jo este maly rozdiel, bcf counter,2 je asi prehladnejsie clrf counter.
A.
> >>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.
>
_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.
Další informace o konferenci Hw-list