c: hi-tech 9,80, interrupt asm

Hynek Sladky econf na centrum.cz
Pondělí Březen 31 12:10:12 CEST 2014


Prekladac 9.83 a ted XC8 1.12.
Projekty, ve kterych to pouzivam, mam prekladane s offsetem 0x800 - 
ladim to bez bootloaderu, proto se musi z reset vektoru i interrupt 
vektoru skocit do ladeneho kodu, kdyz tam bootloader pri ladeni neni. To 
je take nejspis duvod, proc jsem s tim zatim nemel problem. Ale kdyz 
jsem hledal nejake reseni, jak napsat aplikaci s podporou bootloaderu, 
tak jsem taky musel projit mnoho slepych cest, ale prece jen je to uz 
docela davno.
Instrukce goto akceptuje 11-bitovou hodnotu, proto to maskovani - hlavne 
kvuli tomu, abych si pri pripadne zmene vzpomnel, ze tam nejde napsat 
rovnou adresa.

Napada me akorat napsat si zacatek Flash v assembleru, aplikaci posunout 
a doplnit skoky z reset vektoru a low_interrupt vektoru.
Uplne nejlepsi by dle meho bylo napsat si obsluhu high_interruptu v 
cistem assembleru a nechat na linkeru, aby to spravne slinkoval, ale to 
jsem v tomto prekladaci jeste nedelal. Respektive nektere slozitejsi 
veci me rpesvedcily, abych se do toho nepoustel a vysledkem byl vyse 
zminovany postup.


Hynek Sladky


Dne 31.3.2014 10:12, Miroslav Draxal napsal(a):
>
> Co používáte za překladač?
>
> Nějak mi nedochází "goto 0x804 & 0x7FF"k čemu je to dobré?
>
> to je přesně ta konstrukce, kterou bych očekával, jenže hi-tech to 
> vyhodí takhle.
>
> :0 warning: segment "_vectors_text" (0-5) overlaps segment "reset_vec" 
> (0-3)
>
> l.obj: (1343) hexfile data at address 0x0 (0x56) overwritten with 0x80 
> (warning)
>
> a po disis.. to vypadá takhle
>
> 1 0000      EF80      vectors GOTO 0x300
>
> 2 0002      F001                     NOP
>
> 3 0004      0012                     RETURN 0
>
> 4 0006      FFFF                      NOP
>
> 5 0008      FFFF                      NOP
>
> 6 000A      FFFF                      NOP
>
> 7 000C      FFFF                      NOP
>
> 8 000E      FFFF                      NOP
>
> 9 0010      FFFF                      NOP
>
> 10 0012      FFFF                      NOP
>
> 11 0014      FFFF                      NOP
>
> 12 0016      FFFF                      NOP
>
> 13 0018      CFD8     interrupt_low     MOVFF STATUS, 0x6B
>
> 14 001A      F06B                     NOP
>
> 15 001C      CFE8                     MOVFF WREG, 0x6C
>
> Prostě místo na adresu 0x08 to plácne na RESET vektor.
>
> *From:*Hw-list [mailto:hw-list-bounces na list.hw.cz] *On Behalf Of 
> *Hynek Sladky
> *Sent:* Monday, March 31, 2014 7:24 AM
> *To:* HW-news
> *Subject:* Re: c: hi-tech 9,80, interrupt asm
>
> Pro PIC16F182x pouzivam napr. tuto konstrukci:
> static void vectors (void) @ 4 {
> #asm
>   movlp 0x08
>   goto 0x804 & 0x7FF
> #endasm
> }
>
> Ma to tak pouzite v aplikaci s bootloaderem pro premapovani 
> interruptu. Treba to pujde pouzit i pro PIC18...
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20140331/2c703ee2/attachment.html>


Další informace o konferenci Hw-list