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