Forum: Compiler & IDEs Undefinierte Section werden in .data gemappt


von Hilfe (Gast)


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?

von Andreas B. (Gast)


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.

von Hilfe (Gast)


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?

von Hilfe (Gast)


Lesenswert?

Es wäre schön, wenn jemand dazu noch was wüsste. :-)

von Andromeda (Gast)


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.

von Michael D. (andromeda)


Lesenswert?

Oops. Das einloggen hatte nicht geklappt. Also noch ein Post, damit Du 
mir evtl. per PM antworten kannst.

von Hilfe (Gast)


Lesenswert?

Ok, vielen Dank. Nein, ich brauche keine kostenpflichtige Lösung. Werde 
halt damit leben müssen.

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.