Fórum témák
» Több friss téma |
Fórum » PIC16F84 megszakításvektor címzésének problémája
Témaindító: andrewboy999, idő: Ápr 16, 2008
Témakörök:
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. ...
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):
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.
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!
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.
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.
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.
Szerintem ezt gondold át mégegyszer, az adatlapok nem így írják...
Idézet: „A 16fxx nél nem a 04-es címen van a megszakítás, hanem a 08h-n.” Fogadjunk? |
Bejelentkezés
Hirdetés |