[ARM] Versionsinfo im Flash ablegen

OP #7447030
Lesenswert?
• ▲
▼

ich möchte eine Versionsinfo an eine feste Adresse im Flash ablegen. Die ist vom Bootloader und die danach startende Firmware soll diese Info auch finden können. Dazu lege ich eine section an und im Code wird die Info Struktur die per gcc section attribute auf die Adresse gelegt, soweit ok. Aber zum Linkerfile habe ich noch Fragen:

1
  .fini_array :
2
  {
3
    . = ALIGN(4);
4
    PROVIDE_HIDDEN (__fini_array_start = .);
5
    KEEP (*(SORT(.fini_array.*)))
6
    KEEP (*(.fini_array*))
7
    PROVIDE_HIDDEN (__fini_array_end = .);
8
    . = ALIGN(4);
9
  } >FLASH
10

11
  /* Used by the startup to initialize data */
12
  _sidata = LOADADDR(.data);
13

14
  /* Initialized data sections into "RAM_D1" Ram type memory */
15
  .data : 
16
  {
17
    . = ALIGN(4);
18
    _sdata = .;        /* create a global symbol at data start */
19
    *(.data)           /* .data sections */
20
    *(.data*)          /* .data* sections */
21

22
    . = ALIGN(4);
23
    _edata = .;        /* define a global symbol at data end */
24
    
25
  } >RAM_D1 AT> FLASH
26

27
  /* Modification start */
28

29
  .version_info_data :
30
  {
31
    . = ABSOLUTE(0x08040000 - 32);
32
    *(.version_info) 
33
  } >FLASH
34
  
35
  /* Modification end */
36

37
  /* Uninitialized data section into "RAM_D1" Ram type memory */
38
  . = ALIGN(4);
39
  .bss :
40
  {
41
    /* This is used by the startup in order to initialize the .bss section */
42
    _sbss = .;         /* define a global symbol at bss start */
43
    __bss_start__ = _sbss;
44
    *(.bss)
45
    *(.bss*)
46
    *(COMMON)
47

48
    . = ALIGN(4);
49
    _ebss = .;         /* define a global symbol at bss end */
50
    __bss_end__ = _ebss;
51
  } >RAM_D1

das erzeugt .version_info_data im Ram, warum?

1
.version_info_data
2
                0x000000000802262c    0x1d9b4
3
                0x000000000803ffe0                . = ABSOLUTE (0x803ffe0)
4
 *fill*         0x000000000802262c    0x1d9b4 
5
 *(.version_info)
6
                0x000000000803ffe0                . = ALIGN (0x4)

wenn ich die version_info_data Sektion vor .data definiere, dann bekomme ich einen Linkerfehler das .data nicht in das Flash passt weil die Startadresse dann schon auf Flash Ende steht. Wie müsste das richtig aussehen?

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.