[elektro] PIC18 C + asm

flaist flaist at gmail.com
Mon Apr 7 23:59:56 CEST 2014


Szia!
Én is így használtam. Nem egyszerű a dolog.

A C18 az FSR1 és FSR2 regisztert használja C stack-nek.
(ez nem azonos a szubrutin hívás stack-kel)

A kérdés, használsz-e C18-ban íródott IT rutint.

Ha nem, akkor egyszerűbb a helyzet, csak el kell mentened a FSR1 FSR2
regiszter az ASM modulokban.
(az IT rutinokban természetesen mindent amit használsz)

Ha van C18 IT rutin, akkor bonyolultabb a dolog, mert az IT rutin is az FSR1
pointerrel mutatott területre menti  a C-s változókat (REGBx, PRODx, ...
stb).
(disasm listben meg lehet nézni)
És ha az ASM-ben is használod FSR1-2-t, akkor véletlen területre is menthet.
Én ezért, megfejeltem az C18 IT rutint egy ASM résszel, ami mindig menti /
beállítja / visszaállítja az FSR1 és FSR2-t egy szabad területre.

FI.


  

-----Original Message-----
From: elektro-bounces at tesla.hu [mailto:elektro-bounces at tesla.hu] On Behalf
Of Zoltán Balla
Sent: Friday, April 04, 2014 5:12 PM
To: elektro at tesla.hu
Subject: [elektro] PIC18 C + asm

Sziasztok

Elméleti jellegű kérdésem lenne.
Van egy C-s PIC-es programom, melyben a sebességbeli optimalizálás érdekében
asm betéteket használok. Alapvetően indirekt címzés lehetősége miatt
használom ezeket az asm betéteket. FSR0 és 1-et érinti ez általában.
A problémám az, mi van akkor ha pl beüt egy megszakítás, amelyben a fordító
elegánsan szintén használni szeretné ezeket a regisztereket ?! 
Elmentené őket előzőleg, s a megszakítási rutin végén visszaállítja ?
Mi van akkor, ha még csak megszakításról sem beszélünk, egyszerűen csak
előzőleg használja valamelyiket, majd én "belerondítok" az asm betétemmel,
és amikor folytatná, már rég nem az van benne, amivel dolgoznia kéne ?! Hogy
kellene ezt szerintetek korrektül megoldani ?

Zoli

-----------------------------------------
          elektro[-flame|-etc]



More information about the Elektro mailing list