C és assembly keverés, sec tion file-lal fűszerezve

Fórumok

Hali,
avr mikrovezérlő a célhardware és az assembly részt fix címre kellene tennem. Az assembly részben hiába próbálkozom .org-gal, a linker nagyvonalúan felülbírálja.
Próbálom a linkert -T sectionfile opcióval fordítani, a sectionfile tartalma:

SECTIONS {
myprog.out :
{
myprog.o
usb_rawhid.o
. = 0x1800
myprog_asm.o
}
}

A linker syntax errort dob a myprog_asm.o sorra mutogatva. Hogyan kell ezt helyesen?

Hozzászólások

Meg nem ertek annyira az Atmelhez, hogy segiteni tudjak.
Itt szoktam kerdezni, sokan ertenek hozza, csak ertelmesen kell feltenni a kerdest:
http://www.avrfreaks.net/

Amugy bootloadert akarsz irni? Ott tudtommal fix helyre kerul a kod, esetleg kereshetsz olyan peldakat.

--
The programmers of tomorrow are the wizards of the future. You know, you're going to look like you have magic powers compared to everybody else. -Gabe Newell

Kedves GyM,
ez a kérdés független az Atmel világtól, bárhol felmerülhet, bár kétségtelenül kis prociknál tipikus.
Nem csak bootloadernél lehet fontos, pl. az alábbi alkalmazásnál is létszükséglet page határra helyezni a hullámtáblá(ka)t:
http://www.myplace.nu/avr/minidds/
Az avrfreaks régi ismerős, ugyanígy a stackoverflow-nak is van avr-es világban mozgó közönsége - bár ott sincs válasz egyelőre. :)

ez a kérdés független az Atmel világtól, bárhol felmerülhet

A kérdés független, de a válasz nem. Ugyanis minden rendszer jellemzően tök másmilyen linkert használ, ezt a problémát pedig alapvetően a linker oldja meg. Így a kérdésfelvetésednek a valódi megoldása alapvetően Atmel-only lesz.

A kérdés továbbra is kérdés: hogyan kell az assembly részt fix címre helyezni?

SECTIONS {
myprog.out (.text) :
{
myprog.o (.text)
usb_rawhid.o (.text)
. = 0x1000;
myprog_asm.o (.text)
}
myprog.out (.data) :
{
* (.data)
}
}

Most az error az utolsó sot utánra mutat és ilyet szól: lnscr:14: non constant or forward reference address expression for section myprog.out
(Nem, nincs overlap, bőven van hely előtte-utána.)

Igoor:
Cseppenként jó adagolni a tudást, mert nem csapja el a hasat...
A javasolt forma rögtön fennakadt a bss miatt, de ha ki is egészítem a bss-sel, akkor sem fordul. Ne is vesződj velem...
OUTPUT (myprog.out)
SECTIONS {
.text : {
myprog.o (.text)
usb_rawhid.o (.text)
. = 0x1000 ;
myprog_asm.o (.text)
}
.data : { * (.data) }
.bss : { * (.bss) }
}
/usr/lib/gcc/avr/4.7.2/avr35/libgcc.a(_clear_bss.o): In function `__do_clear_bss':
(.init4+0x0): undefined reference to `__bss_end'
/usr/lib/gcc/avr/4.7.2/avr35/libgcc.a(_clear_bss.o): In function `__do_clear_bss':
(.init4+0x2): undefined reference to `__bss_start'
/usr/lib/gcc/avr/4.7.2/avr35/libgcc.a(_clear_bss.o): In function `__do_clear_bss':
(.init4+0x4): undefined reference to `__bss_start'
/usr/lib/gcc/avr/4.7.2/avr35/libgcc.a(_clear_bss.o): In function `.do_clear_bss_start':
(.init4+0xa): undefined reference to `__bss_end'
collect2: error: ld returned 1 exit status
make: *** [myprog.out] Error 1
Fordítás sikertelen.

Fuszenecker_Róbert:
Ez már komolyabb segítség, még bele kell ássam magam. Köszönöm!

Jo, nem veszodom ;) El kellene dontened, mi a celod. Megoldatni valakivel a sajat problemadat, vagy megtanulni, hogyan es mit kell csinalnod, hogy megtalald a megoldast. Az elsohoz nem kivanok asszisztalni, viszont viccesnek talalom, hogy felteszel egy kerdest, idebiggyesztve egy szintaktikai hibakkal megtuzdelt parsoros linker szkriptet es a linker altal kibofogott konkret hibauzeneteket, majd amikor ezekre kapsz egy javitast, puffogni kezdesz, mert a valasz nem egy komplett szkript kepeben erkezik. lol??? Az informacio, amit a belinkelt pdf-ben megtalalsz, fellelheto szamtalan peldaban a neten is, miert okoz/okozott gondot a megtalalasa? Viszont ha nem olvasod el a linker doksijat, a peldak nem fognak sokat segiteni, mert fogalmad sem lesz, mit miert csinalsz. Ha lenne, akkor nem csodalkoznal most sem az ujabb hibauzeneten ...