Fórum témák

» Több friss téma
Fórum » PIC16F84 megszakításvektor címzésének problémája
Lapozás: OK   2 / 2
(#) pixels válasza andrewboy999 hozzászólására (») Ápr 16, 2008 /
 
hali! próbáld így:

ORG 0x00
GOTO START ; ez a 0. meóriacím
NOP
NOP
NOP
BCF INTCON,T0IF ; ez meg a 4.
...

(#) szilva válasza andrewboy999 hozzászólására (») Ápr 16, 2008 / 6
 
Ha egy egy darab asm-ből fordítandó progit írsz, akkor ott Neked kell gondoskodni arról, hogy a megfelelő helyekre kerüljenek a dolgok. Ilyenkor kell használni az "org" direktívát.

Ha egy nagyobb progit írsz, akkor minden asm file-ban úgnyevezett relokálható szegmenseket definiálsz, amikbe a kódrészletek kerülnek, majd a linker fogja ezeket a szegmenseket a fordítás után összeszerkeszteni. Az összeszerkesztéshez van neki a linker script-ben leírva, hogy az adott PIC-ben melyik memóriaterületek milyen típusúak, mire használhatók. A relokálható kódszegmenseket kell a "code" definícióval kezdeni a forrásban. Mutatok egy példát az egyik progimból (ez 18F-es PIC-re íródott, de a lényeg ugyanaz):

  1. ;************* Beginning of the program
  2.  
  3. resvec  code    0x0
  4. ;resvec code    0x0400
  5.         goto    main_start
  6.  
  7. intvec  code    0x8
  8. ;intvec code    0x0408
  9.         goto    int_handle
  10.  
  11.         code
  12.  
  13. int_handle
  14.         MOVWF   W_TEMP ; W_TEMP is in virtual bank
  15.     ...


A "resvec"-es sor definiál egy "resvec" nevű kódszegmenst, ami az abszolút 0x0 címre kell, hogy kerüljön, az "intvec"-es sor pedig egy másikat "intvec" néven, ami az abszolút 0x8-ra kell, hogy kerüljön. Ezek a relokálható szegmens speciális estei, mert valójában nem relokálhatóak, fix helyre kerülnek. A

A csupasz "code" sor egy olyan kódszegmenst definiál, amit majd a linker oda tesz, ahová jónak látja a linker script-ben definiált területen belül. Ennek a neve, ha nem adom meg, akkor ".code" lesz (ha jól emlékszem). A többi asm forrásomban is vannak ilyen kódterületek, a lnker az összes ilyen kódterületen lévő kódot egymás után szerkeszti majd a futtathatóba.

Remélem, így már érthetőbb a dolog.
(#) andrewboy999 válasza szilva hozzászólására (») Ápr 16, 2008 /
 
Köszönöm szilva, azt hiszem kimerítő volt a válaszod, jár érte a pont. Természetesen a többiek fáradalmai sem elhanyagolhatóak!!! Köszönöm nektek is!
(#) szilva válasza andrewboy999 hozzászólására (») Ápr 16, 2008 /
 
Kösz a pontot! Közben körbenéztem az MPLAB-ban (7.62), én nem látok erre külön pipát vagy ilyesmit, hogy utólag linkelje-e az objecteket.

Valószínűleg az neki a "kapcsoló", hogy ha megadsz linker scriptet, akkor objectet fordít és linkel, továbbá ha a forrásfile-ok közé egynél több asm-et felsorosz, akkor megköveteli a linker script használatát.
(#) andrewboy999 válasza szilva hozzászólására (») Ápr 16, 2008 /
 
Hát most vagy én tettem be az elején, vagy véletlenül a kezdésnél kettő temp fájlt tettem be és így bedobta a linker fájlt is.
(#) (Felhasználó 1146) válasza andrewboy999 hozzászólására (») Ápr 17, 2008 /
 
A 16fxx nél nem a 04-es címen van a megszakítás, hanem a 08h-n.
A 18fxxx-nél ugyanez a Hi prioritásu IT, és 018 a Lo prioritás.
(#) szilva válasza (Felhasználó 1146) hozzászólására (») Ápr 17, 2008 /
 
Szerintem ezt gondold át mégegyszer, az adatlapok nem így írják...
(#) potyo válasza (Felhasználó 1146) hozzászólására (») Ápr 17, 2008 /
 
Idézet:
„A 16fxx nél nem a 04-es címen van a megszakítás, hanem a 08h-n.”


Fogadjunk?
(#) (Felhasználó 1146) válasza potyo hozzászólására (») Ápr 17, 2008 /
 
Nem kell fogadni. Igazad van:
Data Sheet 29 oldal.
Következő: »»   2 / 2
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem