Speicher an einer festen Adresse bereitstellen (im DDR-RAM eines ARMs)

Gast #3842765
Lesenswert?
• ▲
▼
Hallo Leute,

ich möchte an einer bestimmten Adresse im RAM Daten ablegen. Dazu 
deiniere ich einfach die Addresse und die Länge meines Bereiches.
Wie kann ich dafür sorgen, dass der Linker dort nichts anderes hinlegt?

Konkret geht es um einen ARM im Zynq, dessen Daten im DDR-RAM abgelegt 
werden.

Grüße, ARMed
Gast #3842779
Lesenswert?
• ▲
▼
ARMed schrieb:
> Wie kann ich dafür sorgen, dass der Linker dort nichts anderes hinlegt?
Indem du ihm nicht sagst, dort etwas abzulegen. Wenn der Linker nicht 
weiß dass dein DDR-RAM existiert, legt er dort auch nichts hin. Konkret 
geht das indem du im Linkerscript die .data Section eben in den SRAM 
oder wo das sonst hinsoll hinlegst.
Darüber hinaus wäre es vielleicht doch schlau, dem Linker die Existenz 
des DDR-RAM's beizubringen über eine entsprechende Section im 
Linker-Script, und eine globale Variable anzulegen und diese per 
Attribut in eben diese Section zu legen. So sparst du dir die hässliche 
Rechnerei mit Adressen im Code, sondern kannst einfach normal direkt auf 
die Variable zugreifen, und der Linker ersetzt die Zugriffe mit der im 
Linkerscript angegebenen Adresse des DDR-RAM's.
Gast #3842982
Lesenswert?
• ▲
▼
Ich möchte nicht den ganzen DDR RAM, sondern nur ein paar MB davon 
selbst verwalten. Diese paar MB möchte ich aber an einer ganz bestimmten 
Adresse haben.

Kann ich eine Section an eine bestimmte Länge zuweisen? Damit könnte man 
dann eine eigene Section für diesen Bereich konfigurieren.

Wenn nicht, würde sowas funktionieren?:
1
MEMORY
2
{
3
   ps7_ddr_0_S_AXI_BASEADDR : ORIGIN = 0x00100000, LENGTH = 0x1FF00000
4
   ps7_ram_0_S_AXI_BASEADDR : ORIGIN = 0x00000000, LENGTH = 0x00030000
5
   ps7_ram_1_S_AXI_BASEADDR : ORIGIN = 0xFFFF0000, LENGTH = 0x0000FE00
6
}
7

8
/* Specify the default entry point to the program */
9

10
ENTRY(_vector_table)
11

12
/* Define the sections, and where they are mapped in memory */
13

14
SECTIONS
15
{
16
.text : {
17
   *(.vectors)
18
   *(.boot)
19
   *(.text)
20
   ...
21
   *(.ARM.extab)
22
   *(.gnu.linkonce.armextab.*)
23
} > ps7_ddr_0_S_AXI_BASEADDR
24

25
.init : {
26
   KEEP (*(.init))
27
} > ps7_ddr_0_S_AXI_BASEADDR
28

29
...
30

31
.stack (NOLOAD) : {
32
   . = ALIGN(16);
33
   _stack_end = .;
34
   . += _STACK_SIZE;
35
   _stack = .;
36
   
37
    ...
38

39
   . += _UNDEF_STACK_SIZE;
40
   . = ALIGN(16);
41
   __undef_stack = .;
42
} > ps7_ddr_0_S_AXI_BASEADDR
43

44
//*****************hier meine Sektionen********************
45
.mySection1 MY_SECTION1_ADDRESS : {
46
   *(.mySection1);
47
} > ps7_ddr_0_S_AXI_BASEADDR
48

49
.mySection2 MY_SECTION2_ADDRESS : {
50
   *(.mySection2);
51
} > ps7_ddr_0_S_AXI_BASEADDR
52
//***********************************************************
53

54
_end = .;
55
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.