c: hi-tech 9,80, interrupt asm

Miroslav Draxal evik na volny.cz
Pondělí Březen 31 10:12:56 CEST 2014


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...


Hynek Sladky




Dne 29.3.2014 20:49, Miroslav Draxal napsal(a):

Dobrý den, založil jsem nové vlákno, ale má návaznost na předchozí vlákno.

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ů.

  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ý (uložit na
008h goto interruptME)

 

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

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


Další informace o konferenci Hw-list