Forum: FPGA, VHDL & Co. Microblaze: SDA_BASE und SDA2_BASE ?


von klaus (Gast)


Lesenswert?

Hallo zusammen,

mal wieder was zum Thema Microblaze: Wie funktioniert das mit SDA_BASE 
und SDA2_BASE ?

Im Linker Script wird SDA2_BASE wie folgt definiert:
1
.sdata2 : {
2
   . = ALIGN(8);
3
   __sdata2_start = .;
4
   *(.sdata2)
5
   *(.sdata2.*)
6
   *(.gnu.linkonce.s2.*)
7
   . = ALIGN(8);
8
   __sdata2_end = .;
9
} > DDR2_SDRAM_MPMC_BASEADDR
10
11
.sbss2 : {
12
   __sbss2_start = .;
13
   *(.sbss2)
14
   *(.sbss2.*)
15
   *(.gnu.linkonce.sb2.*)
16
   __sbss2_end = .;
17
} > DDR2_SDRAM_MPMC_BASEADDR
18
19
_SDA2_BASE_ = __sdata2_start + ((__sbss2_end - __sdata2_start) / 2 );

...und SDA_BASE so:
1
.sdata : {
2
   . = ALIGN(8);
3
   __sdata_start = .;
4
   *(.sdata)
5
   *(.sdata.*)
6
   *(.gnu.linkonce.s.*)
7
   __sdata_end = .;
8
} > DDR2_SDRAM_MPMC_BASEADDR
9
10
.sbss : {
11
   . = ALIGN(4);
12
   __sbss_start = .;
13
   *(.sbss)
14
   *(.sbss.*)
15
   *(.gnu.linkonce.sb.*)
16
   . = ALIGN(8);
17
   __sbss_end = .;
18
} > DDR2_SDRAM_MPMC_BASEADDR
19
20
_SDA_BASE_ = __sdata_start + ((__sbss_end - __sdata_start) / 2 );

Im Startup-Code steht dann sowas:
1
  la  r13, r0, _SDA_BASE_ 
2
  la  r2, r0, _SDA2_BASE_

Jetzt entdecke ich insbesondere in der Berechnung der Symbole nicht den 
Sinn. Wo beabsichtigt man dann damit hinzuzeigen ? Einfach "irgendwo" in 
den Bereich zwischen .sdata und .sbss ?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.