stack u PIC 18Fxxx

Jan Waclawek wek@evona.sk
Středa Leden 5 10:37:17 CET 2005


> Cim by se dal timto udelat bordel? Jestlize z obsluhy preruseni odejdu pres RET, tak je to uplne stejne jako kdyz navratovou adresu ze zasobniku vyhodim a jdu presne kam potrebuji JMPem. Podivejte se nekdy jak se predavaji parametry treba v C podprogramum a jak vraceji vysledky. To je teprve libusta a zadny bordel v tom neni.

Tak priklad:

hlavny_cyklus:
	robim_nieco
	push	register
	robim_nieco_ine		;*1
	pop	register
	call	podprogram
	skoc_na hlavny_cyklus
dodatocne_spracovanie:
	robim_spracovanie_po_preruseni
	ak nesplnena_podmienka tak skoc_na hlavny_cyklus
	
podprogram:
	robim_nieco_v_podprograme  ;*2
	ret

prerusenie:
	pop	navratova_aderesa
	povol_dalsie_prerusenia		;*3
	jmp	dodatocne_spracovanie

Ak nastane prerusenie v bode *1, v stacku mate register, ktory tam 
zostane uz navzdy. Podobne v bode *2, vtedy tam zostane navratova adresa 
odkial bol podprogram volany.
Pochopitelne sa da urobit aj "upratovanie", t.j. prestavit stack pointer 
v bode *3 na dohodnutu hodnotu; ale to moze a nemusi vadit. Toto je 
presne pristup, ktorym sa vytvori mozno funkcny, ale neudrziavatelny kod 
(ak ho po roku upravite, uz sa nebudete pamatat na tu fintu a uprava ju 
pokazi). A to je presne aj pricina, preco Wirth zavrhuje - inak ak sa 
pouzije uvazene, velmi uzitocny - prikaz goto.
Koser je tu slucku ukoncit; a kedze v nej je tak ci tak test (na 
ukoncenie vzorkovania po naplneni buffra) staci podmienku v preruseni 
"sfalsovat".

wek



Další informace o konferenci Hw-list