(avr-)gcc, szegmentalas?

 ( apal | 2018. április 18., szerda - 9:15 )

Sziasztok!
Van egy olyan problemam, hogy egy ATmega128-as flash-teruletebe szeretnek beletenni egy FPGA bitstreamet. Alapesetben ez tok jol mukodik, fix cimzessel, minden oke. Kerdes az az hogy ezt hogyan tudnam "kulturaltan" megoldani, azaz valahogy deklaralni neki egy szegmenst, megpedig ugy hogy a szegmens az mindig flash page-aligned (azaz itt konkretan 256-tal oszthato) cimre keruljon? Az elofordulhat a fejlesztes soran, hogy a bootloader a fo kodot nem frissiti, csak a bitstream-et (ezert kell page alignment). Ugyanakkor hosszutavon nem tul elegans ha mindig fix cimre kerul, vagy ha fix cimre is kerul, jo lenne ezt a C kodon belul tartani es ne mondjuk az objcopy + srec_cat takoljon ossze egy olyan hex image-t, ami epp' jo offset-en van (azaz most epp igy csinalom).
Maga az avr-gcc, ha jol latom/ertem, 3 szegmenst hoz letre (vector table, fo program, illetve a crt soran lefuttatott flash -> ram masolas adata, pl ide kerulnek a stringek is), valahogy ezt probalnam kiterjeszteni.
Thx, A.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Egy lehetőség:
srec_cat -tel csinálhatsz C tömböt a FPGA image -ből, majd ezt forrásként fordítod. A tömb definíciójába pedig bele csempészel egy __attribute__(aligned(256)) -ot (link).

Koszi, ez jo, ilyesmit kerestem!

+1 erre, illetve a PROGMEM mondja meg a forditonak, hogy azt a konstans tombot tegye a flash-re (legalabbis Arduinonal, nemtom az avr-gcc-nek szol-e, vagy a sajat rendszeruknek). Igy egy "default" image-et is meg tudsz adni.
Javaslom tovabba, hogy ha a tartalmat a bootloader valtoztatja, akkor a merete is legyen 256 tobbszorose, es egy fixen lefoglalt (lehetoleg az aktualis meretet kenyelmesen meghalado) tomb. Ugye az FPGA kod merete is valtozhat, es nem buli, ha utana mas, hasznos dolog jon..
Pl.:
#define FPGA_SIZE 8192
const PROGMEM uint8_t FPGA_prog[FPGA_SIZE]={0xde,0xad,0xbe,0xef,...};

Ja, ha szukseges, celszeru kivalasztani egy megfelelo checksum modszert a kod integritasanak ellenorzesere. (mar ha olyan jellegu a feladat, es nem akarod brickelni az eszkozt.. pl. ha mindig kapcsolodik pl. PC-hez, es az FPGA-nak nincs csak volatile memoriaja, valamint az FPGA nelkul is megy a bootloader-es update, akkor nem kell)

(btw: a link nem sikerult)

--
Any A.I. smart enough to pass a Turing test is smart enough to know to fail it. -Ian McDonald