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

 ( Uhum2004 | 2013. július 20., szombat - 21:41 )

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

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.

ha avr-gcc, akkor gnu linkert hasznal

--
NetBSD - Simplicity is prerequisite for reliability

. = 0x1800;

Jé, ilyen egyszerű? :)) Úgy tűnik, működik. Köszönöm!

np, de csodalkoznek, ha a linker doksijaban ez nem lenne benne ;)

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

Én régen így oldottam meg: 20. oldal.

Fuszenecker_Róbert

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

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!

tippre ilyesmit szeretne a libgcc-d:

.bss : {
__bss_start = .;
* (.bss)
__bss_end = .;
}

--
NetBSD - Simplicity is prerequisite for reliability

javitsatok ki, de igy a data/bss a 0x1000 + sizeof(myprog_asm.o) utanra kerul, jo ez neked (vagyis a uc-nek)?

--
NetBSD - Simplicity is prerequisite for reliability

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