AVR GCC definovanie vlastnej section

martin forum.martin@gmail.com
Pátek Červenec 3 21:15:02 CEST 2009


Zdravím,
Riešim nasledovný problém:

K AVR Mega162 mam pripojenú FRAM na I2C zbernici. Napísal som funkcie na
čítanie a zápis (fram_read_byte, fram_write_byte, ...) podobne tým z
avr-libc eeprom_read_byte, eeprom_write_byte ... a definoval som makro

#define FRAM __attribute__(section(".fram"))

ktoré definovanej premennej povie že má byť mapovaná do sekcie .fram. (napr:
uint8_t FRAM fram_premenna;)
V linkeri premapujem sekciu .fram na adresu 0x90000
(-Wl,--section-start=0x900000), čím zabezpečím že premenné ktoré majú byť vo
framke sú od adresy 0x0000.
Adresu na čítanie a zápis z/do fram beriem z pointra definovanej premennej.
Prvá premenná je na adrese 0x0000, a ďalšie sú naskladanie pekne za sebou.
Všetko funguje ako som si "vysníval" keď premenné do framky definujem v
jednom zdrojovom súbore. Problém nastáva keď sú premenné definované vo
viacerých zdrojových súboroch.
Vtedy sa vytvorí sekcia .fram z prvého zdrojového súboru a z ďalších sa
vytvoria sekcie .fram.1 .fram.2 ... To spôsobí že presunutie sekcie linkerom
funguje len pre prevý zdrojový súbor.

Keď definujem premenné pre sekciu .eeprom (EEMEM) alebo pre flasku .text
(PROGMEM) tak sú pospájané do jednej sekcie .eeprom alebo .text.

Mam pocit, že cesta vedie cez definovanie vlastného LINKER SCRIPTU, ale
netuším ako na to.

Ak niekto viete o čom hovorím, skúste ma prosím nakopnuť správnym smerom.

Ďakujem

s pozdravom

Martin
------------- další část ---------------
HTML příloha byla odstraněna...
URL: http://list.hw.cz/pipermail/hw-list/attachments/20090703/19361a1a/attachment-0002.htm 


Další informace o konferenci Hw-list