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
Im Linker-Script die Section definieren. Die Daten kann man dann mit __attribute__((section (".sectionname"))) verziert dort plazieren.
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 ?
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__[];
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.