c: hi-tech 9,80, interrupt asm

Miroslav Draxal evik na volny.cz
Pondělí Březen 31 21:27:57 CEST 2014


Ne neuzavřeli. Jenom pátrám dál. O tom bootloaderovi v examles vím, koukal
jsem. Problém je v tom, že tohle přesouvání je všechno "systémové". Já chci
nesystémově podstrčit kompilátoru mnou napsanou obsluhu přerušení.  Kompiler
si udělá "systémově" začátek rutiny přerušení tj, uklidí registry, pak předá
řízení do

void interrupt low_priority interrupt_low (void)

a po návratu z funkce přerušení zase systémově obnoví registry. Těch
registrů ukládá a obnovuje cca 13, což je pro mě moc. V přerušení používám
jenom W reg a potřebuji "fofr". Nemusím ukládat registry.

Takže řešení je:

1/ buďto nějak systémově přesvědčit kompilátor, aby místo své obsluhy
přerušení použil mou

2/ nebo nesystémově použít 

Void MeInterrupt(void)@0x08

 

Pokud použuji 2/ v hi-tech 9,80 tak to místo na adresu 0x08 přeloží na 0x00,
což je chyba

Pokud použiji 2/ v xc8, tak se to přeloží OK

 

Problém je, že 9,80 mám legálně ve verzi PRO, a pokud použiji XC8, tak tam
jedu ve verzi Lite a už se do pice nevejdu. Ten projekt musí být i nadále
živý, čili nemohu ho jednorázově přeložit ve zkušební verzi XC8  PRO.

 

Dnes mě napadlo, že bych využil toho, že funguje 

Void MeReset (void)@0x00

#asm

Goto _picInit

Nop

Nop

Goto _MeHigInterrupt

#endasm

 

Což funguje, vše se uloží jak má, ale problém je, že zas nevím jak zapsat to
_picInit. Je to inicializační rutina procesoru, kde se nuluje RAM atd. To
zase dodá kompiler. Adresa počátku rutiny se mění po rekompilaci (přidání
dalšího kódu). Nevím jak se na ten pic Init odkázat, aby tomu kompiler
rozuměl.

 

M.

 

From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Andrej
Jancura
Sent: Monday, March 31, 2014 8:12 PM
To: HW-news
Subject: Re: c: hi-tech 9,80, interrupt asm

 

Dobry vecer,

vidim, ze ste uz temu uzavreli, takze to mozem pomaly zbalit aj tu. Ale este
by som rad dve poznamky k tejto problematike. Nie je to sice k tomu ako
donutit kompilator, aby Vam dal na adresu interruptu Vasu rutinu, ale o tom
ako to robil HiTech cisto v C.

Neviem aku verziu kompilatora mate Vy, ale ja som mal v tej svojej adresar
examples, kde bol hotovy bootloader vratane zdrojaku a suboru s pouzitymi
prepinacmi pre kompilator, aby relokoval aj interrupt vektor. Mozno Vas to
inspiruje.

Druha moznost ako na to, je pozriet sa na prepinac kompilatora tusim ICD
alebo taky nejaky podobny. Ked si ich nechate vypisat, tak Vam vypise vsetky
a z tych si vybrat tie, ktore potrebujete. Ja si ich uz nepamatam. Ale bolo
to uz v casoch 16F877. Teda peknych par rokov dozadu.

A.
 

 

2014-03-31 13:13 GMT+02:00 Miroslav Draxal <evik na volny.cz>:

Já to pro vyzkoušení udělal podobne , jenom mě zajímalo, jestli není
nějaké"volatile" pro funkce..

 

From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Hynek Sladky
Sent: Monday, March 31, 2014 12:53 PM


To: HW-news
Subject: Re: c: hi-tech 9,80, interrupt asm

 

No vidite, uz je to dlouho a mnoho detailu jsem si nevzpomnel... Tohle jsem
nasel na konci kodu:-)


  do {
    ....
  } while (1);
  // dummy call to prevent removing vectors function by optimizer
  vectors ();
Samozrejme se to misto nikdy neprojde, takze se funkce nezavola, ale zustane
v kodu zachovana.

Diky za odkaz na PDF. Kdyz jsem psal prvni bootloader, tak zrejme jeste
prezentace nebyla k dispozici, nicmene to mam resene dost podobne. Pak to uz
fungovalo, tak uz jsem to nemenil :-)

Hynek Sladky



Dne 31.3.2014 12:30, Miroslav Draxal napsal(a):

No a jak řešíte, aby vám překladač neoptimalizoval tu vaší funkci? Udělejme
nejjednodušší možnou funkci ve tvaru:

static void vectors (void) @ 4 {
#asm
  goto 0x804 & 0x7FF
#endasm
}

 

potom, pokud jí někde v kódu nevoláte, tak ji překladač zoptimalizuje a
nepřeloží ji.

XC8 to skutečně schroupe správně 9.80 nikoli.

 

Tohle Vám skutečně chodilo pod 9.83?

 

Jak to dělat správně s bootloaderem po XC8 je tady
http://www.microchip.com/stellent/groups/SiteComm_sg/documents/DeviceDoc/en5
58478.pdf

 

 


_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz
Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list

 

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20140331/923c4ea1/attachment.html>


Další informace o konferenci Hw-list