Undefinierte Section werden in .data gemappt

Gast #2172870
Lesenswert?
• ▲
▼
Hallo zusammen,

Ich habe folgender Linker Text (ein kleiner Auszug):

  DATA (rw)  :        ORIGIN = 0x40000000, LENGTH = 0x00002400  /* 
Internal memory */

  DISP_DATA (rw):    ORIGIN = 0x40002400, LENGTH = 0x00000800  /* Copy 
of display RAM */

...

  .data : AT (_etext)
  {
    _data = . ;
    *(.data)
    SORT(CONSTRUCTORS)    /* Sort constructors (C++) */
  } >DATA      /* Region is DATA */

  . = ALIGN(4);

...

  .bss :
  {
    __bss_start = . ;    /* __bss_start(__) can be accessed by user code 
*/
    _bss_start_ = . ;
    *(.bss)
    *(COMMON)
  } >DATA

  . = ALIGN(4);

...

  .DISPLAY_RAM (NOLOAD) :  /* Display data RAM must not be included in 
flash memory */
  {        /* (not included in HEX file) */
    *(.DISP_DATA)
  } >DISP_DATA


Nun folgende Frage:
Wenn ich folgenden Code habe:
static char_t dispData[10] _attribute_ ((section (".DISP_DATA")));
dann wird in DISP_DATA geschrieben

Allerdings wenn ich
static char_t dispData[10] _attribute_ ((section (".DsdISP_DATA")));
habe, dann schreibt es diesen Bereich in .data

Ich möchte aber eine Fehlermeldung vom Linker, wenn ich zB. 
Schreibfehler habe. Wie kann ich das bewerkstelligen?
Gast #2173105
Lesenswert?
• ▲
▼
Hilfe schrieb:
> Ich möchte aber eine Fehlermeldung vom Linker, wenn ich zB.
> Schreibfehler habe. Wie kann ich das bewerkstelligen?

Würde ich nicht über den Linker. Mach doch ein passendes Define, das 
macht es dann auch lesbarer:
1
#define __displayram  __attribute__((section(".DISP_DATA")))

Zudem auch noch leichter zu warten, wenn mal doch die Implementierung 
geändert wird. Die Möglichkeit, solche Defines zu erstellen, ist einer 
der Gründe warum beim GCC Einstellungen über Pragmas vermieden wurden.
Gast #2173145
Lesenswert?
• ▲
▼
Das ist schon gut. Nur habe ich sehr viele Sections. Hatte mal was 
falsch geschrieben und der Linker hatte nichts dagegen gehabt und die 
deklarierte Variable in .data gespeichert. Habe ziemlich lange gebraucht 
bis ich den Fehler gefunden hatte.

Ich möchte nur solche Effekte vermeiden. Auch wenn mal später jemand die 
Memory-Bereiche im *.ld File ändert bzw. umbenennt, dann wird im 
WorstCase Fall so ein Fehler gar nie erkannt. Darum möchte ich gerne 
dass der Linker zumindest ein Warning herausgibt nach dem Compilieren. 
Ist denn das nicht möglich?
Gast #2177638
Lesenswert?
• ▲
▼
Mit dem Linker geht das nicht. Er hat keine Option um bei verwaisten 
Sections (also solchen die im Linker script nicht erwähnt sind) zu 
warnen.

Ich würde mir einen eigenen Perl-Script schreiben, der im Makefile 
aufgerufen wird.

Wenn Du das alleine nicht hinbekommst, könnte ich Dir so einen Script 
gegen Bezahlung zu schreiben.

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.