Zdravím,<div><br></div><div>Riešim nasledovný problém:</div><div><br></div><div>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 </div>
<div><br></div><div>#define FRAM __attribute__(section(&quot;.fram&quot;)) </div><div><br></div><div>ktoré definovanej premennej povie že má byť mapovaná do sekcie .fram. (napr: uint8_t FRAM fram_premenna;)</div><div>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. </div>
<div>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.</div><div>Všetko funguje ako som si &quot;vysníval&quot; 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. </div>
<div>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.</div><div><br></div><div>Keď definujem premenné pre sekciu .eeprom (EEMEM) alebo pre flasku .text (PROGMEM) tak sú pospájané do jednej sekcie .eeprom alebo .text. </div>
<div><br></div><div>Mam pocit, že cesta vedie cez definovanie vlastného LINKER SCRIPTU, ale netuším ako na to. </div><div><br></div><div>Ak niekto viete o čom hovorím, skúste ma prosím nakopnuť správnym smerom.</div><div>
<br></div><div>Ďakujem</div><div><br></div><div>s pozdravom </div><div><br></div><div>Martin</div><div><br></div><div><br></div>