GNUARM Programbereich reservieren ?

Gast #367095
Lesenswert?
• ▲
▼
Hallo,

ich möchte beim GCC-ARM einen Teil des Programmbereiches für per
Programm erzeugt Tabellen reservieren, die dann mit IAP Prozeduren
später platziert werden. Der Bereich ist also zunächst leer, bis auf
eine Dummy-Konstante. Das Programm soll dadurch auch nicht aufgebläht
werden.

Mein bisher benutzer C-Compiler wurde das so erledigt:
#pragma text:iap_area
   const u_char iapstart_dummy[] =        {0};
#pragma text:text
Beim Linken wurde dann die Startaddresse und die Länge von iap_area
festgelegt.

Wie bitte macht man das beim GNUARM Compiler ?

Danke
Gast #367098
Lesenswert?
• ▲
▼
Weiss nicht ob ich's verstanden habe.

Habe im Linker cmd file folgendes gemacht:

....

MEMORY
{
  flash       : ORIGIN = 0,          LENGTH = 128K  /* FLASH ROM
       */
   iapflash    : ORIGIN = 0x00020000, LENGTH = 384K  /* IAP FLASH ROM
        */
  ram         : ORIGIN = 0x40000000, LENGTH = 32768 /* free RAM area
      */              */
  ram_usb_dma : ORIGIN = 0x7FD00000, LENGTH = 8192  /* on-chip USB DMA
RAM area */
}

....

  .iap :
  {
      *(.iap)
  } >iapflash

und dann :

const u_char Loggerarea[] __attribute__((section (".iap"))) =  {0};


Ergebnis ist aber, dass sich die Filegröße fast verdoppelt. Das wollte
ich
eigentlich nicht haben .

Mach ich was falsch ?
Gast #367099
Lesenswert?
• ▲
▼
Wenn in der IAP-Section von Compiler/Linker keine Daten liegen sollen,
dann darf sie entsprechend definiert werden. In Analogie zu .bss also:

  .iap (NOLOAD) :
  {
      *(.iap)
  } >iapflash

Statt über attributierte Variablen lässt sich eine komplette Sektion
auch über vom Linker definierte Symbole ansprechen. Beispielsweise
mit:

  .iap (NOLOAD) :
  {
      _iap_start_ = . ;
      *(.iap)
  } >iapflash

und im Programm:

  extern char __iap_start__[];
Gast #367100
Lesenswert?
• ▲
▼
@A.K

Danke vielmals, es scheint zu funktionieren.

Ich beneide dich um dein Wissen rundum GCC! Wenn ich genau gewußt
hätte
was
mich beim Umstieg auf GCC alles erwartet, hätte ich vermutlich nicht
angefangen.
Zumal es sicher nicht lange dauern wird bis ich an die nächste Hürde
stoße.

Danke jedenfall nochmals.

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.