jak dat procedure abs.adresu v C v Yagarto?

Jan Waclawek konfera na efton.sk
Pondělí Prosinec 6 20:11:55 CET 2010


On Mon, 06 Dec 2010 18:17:57 +0100
Ondrej <leguanolog at seznam.cz> wrote:

> V Yagarto neumím, ale v gcc se to dá udělat zhruba takhle takhle:
> Fci se nastaví atribut " __attribute__ ((section (".bootloader")));"  a 
> lineker pak spouští s parametrem "--section-start=.bootloader=0x1E000". 
> Pokud stačí umístění jen "někam nahoru", tak stačí soubor pojmenovat 
> AAA.c a linker ho pak zpracuje jako první a tudíž umístí jeho obsah na 
> začátek paměti. Ale je to takové dosti pofidérní řešení bez záruky úspěchu.
> 
> Dělal jsem to už dávno a tak si to zcela nepamatuji, ale myslím, že tam 
> byl nějaký problém s proměnnými respektive že tímto postupem nešlo 
> naalokovat proměnné. 

Tych problemov s tymto pristupom je viac. Jeden je, ze tento command-line switch vytvori dalsiu a dalsiu section pre kazdy subor, v ktorom by sa premenna oznacena takymto atributom nachadzala; a tie sa tym padom budu prekryvat. Dalsi problem je, ze takto umiestnene premenne sa neinicializuju ani nenuluju pri starte. 

Takze pri nejakych zlozitejsich problemocch je potrebne sa ponorit do linker scriptu, a to nie je uplne trivialne.

GNU linker je bohuzial nie najlepsie zdokumentovany a je v nom vela sedivych miest, ktore sa naviac v case (s roznymi verziami binutils) tak trocha menia :-(

wek


Další informace o konferenci Hw-list