IAR 2.28 assembly-ben

VF vf at elte.hu
Sat Feb 14 23:00:08 CET 2004


Thus spake I.R. <istvan.retaller at evoran.hu>:

> Error[e72]: Segment UDATA1 must be defined in a segment definition option (-Z, -b or -P)

[..]

> Mi a fene ez? Ezek a default opciok, mi baja a linkernek?

Rossz a progid. Nezd meg az xcl fajlt, nincs benne UDATA1 nevu szegmens.
Pontosan hova akarod tenni azt a szegmenst? Alapbol minden memoriatipus
definialva van, csak akkor kell hozzanyulni az xcl-hez, ha valamiert
konkretan meg akarod hatarozni a cimtartomanyt. De akkor is inkabb az
ASEG lesz a baratod. A mega128-nal a 64k alatti reszre is kulon
definialnak szegmenst, tehat tenyleg nem nagyon van olyan szituacio
amikor bele kene nyulni...
Tehat az RSEG elso parametere a hely ahova szeretned pakolni a szegmenst,
a masodik a tipus, DATA vagy CODE. Utana meg lehet flageket megadni,
pl NOROOT, es akkor nem linkeli csak ha van ra hivatkozas, stb...
Az elso tehat nem egy egyedi azonosito, mint mas forditoknal!

Meg nehany tipp:
Nem rseg code es org 0, az hulyeseg. RSEG INTVEC:CODE! Akarhol lehet a
progiban, jo helyre fogja linkelni.
Utana RSEG CODE:CODE vagy RSEG CODE:DATA
Ez utobbi furan nez ki, azt jelenti hogy a teljes program-memoriaba
(pontosabban csak az INTVEC utan) lehet pakolni a szegmenst, viszont DATA
tipusu.
Mega128-nal ha az also 64k-ba akarsz pakolni adatot: RSEG NEAR_F:DATA
Az INTVEC kivetelevel mindenhova erdemes a vegere :NOROOT-ot irni.
Ha csinalsz egy modult mindenfele fuggvenyekkel, mindegyik ele
odairhatod hogy RSEG CODE:CODE:NOROOT, csak azok fordulnak bele, amelyeket
meg is hivod, a tobbi mint ha ott sem lenne.
Ja es a foprogram, melyben az INTVEC szegmens is van, kezdodjon
PROGRAM-mal, a vegen ENDMOD es END. A tobbi modul siman MODULE.
Ez azert jo, mert a PROGRAM-ot mindig linkeli, a modult siman
kihagyja az egeszet ha nincs ra hivatkozas.
Modulokat mindenkepp erdemes csinalni, mert a cimkek modulra lokalisak,
mas lokalis cimkek, mint pl az m68k asm-ben, nincsenek. Ja vannak meg
makro lokalis cimkek is, de az mas.

Ha esetleg C-ben nyomulsz, erre mindre nem lesz szukseged. Viszont ha
belenezel a listfajlba amit a C progibol csinalt, meg fogod talalni
ugyanezeket a szegmenses trukkoket.
Az IAR asm resze egyebkent ingyenes, es a studional sokkal jobb.

Meg valami: a mega128 header fajl (iom128.h/iomacro.h) kicsit beteg.
Hogy pontosan hol, azt nem tudom, az iomacro.h-t egy helyen megnyultam,
igy megy. De ezt mar irtam maganba meg regebben.
A hibat kiderithetne valaki aki ert a C prepocesszor mukodesehez,
nekem nem sikerult... Erdekes modon a C progikban az eredeti jo, es
a megnyult nem mukodik, ugyhogy nekem ket iom128.h van, az egyikben
van egy #define, amitol az iomacro.h nem kulonbozteti meg a normal es
az extended IO teruletre vonatkozo SFR makrokat. Ugyanabban a
projectben az asm modulokban az egyiket, a C modulokban a masikat
kell includolnom, eleg szanalmas, de muxik.

(Remelem sikerult valamennyit torlesztenem a subi segitsegedert)

> Udv, RI

-- 
Valenta Ferenc <vf at elte.hu>   Visit me at http://ludens.elte.h u/~vf/
"Megprobaltam az o fejevel gondolkodni, de nem jutott az eszembe semmi"



More information about the Elektro mailing list