pic 18f Hi-tech9,80 Vlastní obsluha interruptu

Dobrý den,
Využívám u PICe přerušení s vysokou prioritou pro TMR3. Ovšem kompiler po provedení přerušení uklízí zbytečně moc registrů.(Hi-Tech 9.50 PRO)
5940 0009FA CFEA F03B movff fsr0h,??_interrupt_high+3
5941 0009FE CFE1 F03C movff fsr1l,??_interrupt_high+4
5942 000A02 CFE2 F03D movff fsr1h,??_interrupt_high+5
5943 000A06 CFD9 F03E movff fsr2l,??_interrupt_high+6
5944 000A0A CFDA F03F movff fsr2h,??_interrupt_high+7
5945 000A0E CFF3 F040 movff prodl,??_interrupt_high+8
5946 000A12 CFF4 F041 movff prodh,??_interrupt_high+9
5947 000A16 CFF6 F042 movff tblptrl,??_interrupt_high+10
5948 000A1A CFF7 F043 movff tblptrh,??_interrupt_high+11
5949 000A1E CFF8 F044 movff tblptru,??_interrupt_high+12
5950 000A22 CFF5 F045 movff tablat,??_interrupt_high+13

V obsluze přerušení s registry nepracuji, tudíš jejich schovávání je zbytečné. Úschova a obnova trvá dost dlouho. Rád bych si napsal komplet obsluhu přerušení v asm(cca 10 řádků). Celý den nad tím sedím a nedostal jsem se ke kloudným výsledkům.

a/dá se nějak v C podstrčit moje obsluha interuptu? (snad by to mělo jít přes PSECT???)
or
b/dá se v C vytvořit funkce, která má začátek v ram pevně daný
void MojeObsluhaHighInterrupt(void)@0x08
tohle ovšem nefunguje, přeloží to na RESET vektor 0x00

díky za případné nakopnutí Míra

ok … asi by to slo … staci se podivat do PRIRUCKY, ktera se ulozila do slozky s nainstalovanym kompilerem … tam zjistis jak oznacit blok, ktery je napsany v ASM “tvoji” rukou a kompiler to nebude nejak zkoumat a prelozi do HEX… -nebo mozna, u danych promennych, ktere nechces optimalizovat pouziit: “volatile”?!

no právě že né.
jak oznámím kompileru, aby mi blok psaný v asm uložil na adresu 0x08h? dokumentace mlčí.

no asi bude lepsi prejit k XC8 … tam jsem to nekde zahledl …

doprčic, v XC8 to jde. Jenže já má koupenou hi-tech 9,80 pro.

nakonec to dopadlo trochu jinak, je to přepis z HW konve

Dobrý den, tak nakonec to dopadlo, ale nejsem s toho moudrý.

Ovšem po přidání těl procedur obsluhy to zase začalo ukládat
nepoužívané registry.

Následně po laborování jsem zjistil, že pokud uložím podprogramy,
které se volají z hlavního programu přerušení před něj, je zase vše v
pořádku.

Správná struktura
Podprogram_přerušení1
Podprogram_přerušení2
Program_přerušení

Špatná struktura
Program_přerušení
Podprogram_přerušení1
Podprogram_přerušení2

Zatím tohle chování neumím vysvětlit. Dělá to jak Hi-Tech 9,80 tak XC8
1,30.

Soudím, že to je proto, že při překladu “Program_přerušení” překladač neví, které registry budou v těch volaných “Podprogram_přerušení” použity a proto pro jistotu uloží všechno. Když už je ale má přeložené před tím, tak to ví a správně uloží jen co je potřeba