GNUARM Programbereich reservieren ?

Gast #367095
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
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
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
@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

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.