gcc, arm, pristup k periferiim

Jan Waclawek konfera na efton.sk
Pátek Srpen 17 15:07:57 CEST 2018


>Máte možná pravdu, ale... Vycházím ze zkušenosti, on při překladu gcc 
>neví, kde bude po linkování struktura ležet.

Vie - gcc predpisuje zarovnavanie linkeru, defaultne zarovnava vsetko na
word, nejako sa to da potlacit prepinacmi ale nejdem to hladat ani skusat.

Nevie to len vtedy, ak sa adresa struktury odovzdava cez premennu, vid moj
predchadzajuci post.

>Takže ano, ani samo odstranění fpacked-struct  nepomůže, musí se použít 

Pomoze, pomohlo mne aj panovi kolegovi Smrzovi.

Skusali ste prekladat konkretne ten subor ktory bol uvedeny? Viete uviest
nejake konkretne priklady (zdrojak a disasm), kde to fpacked-struct
nepomoze, spolu s command-line pouzitom pri preklade?

>Zkušenost je taková, že důsledné zarovnávání dat může některé algoritmy 
>na této architektuře urychlit i několikanásobně.

To urcite ano, ale defaultne to dosledne zarovnavanie je pozapinane, ak
nepouzijete prepinace alebo nejake ine mechanizmy, ktore to potlacia.

wek



----- Original Message ---------------

Subject: Re: gcc, arm, pristup k periferiim
   From: Miroslav Mraz <mrazik at volny.cz>
   Date: Fri, 17 Aug 2018 14:44:16 +0200
     To: hw-list at list.hw.cz

>Máte možná pravdu, ale... Vycházím ze zkušenosti, on při překladu gcc 
>neví, kde bude po linkování struktura ležet. Leda, že by se mu nějakým 
>přepínačem řeklo co má jak zarovnávat. Normálně může strukturu nebo i to 
>uint32_t fláknout na lichou adresu. Byl jsem ale líný to hledat (pokud 
>vůbec něco takového existuje), tak jsem to "zoptimalizoval" ručně.
>Takže ano, ani samo odstranění fpacked-struct  nepomůže, musí se použít 
>to __attribute__ ((aligned (4))) explicitně. Já bych to nepovažoval za 
>bug, ale spíš za velmi nepříjemnou vlastnost architektury Cortex-M0. 
>Zkušenost je taková, že důsledné zarovnávání dat může některé algoritmy 
>na této architektuře urychlit i několikanásobně.
>
>Mrazík
>
>Dne 17.8.2018 v 14:23 Jan Waclawek napsal(a):
>> Nemusi, vid ten citat od armu.
>> 
>> Ak je struct ako taky zarovnany (co prekladac moze od linkera vynutit), tak
>> prekladac presne vie, ako su zarovnane jeho jednotlive polozky, a tak k
>> nim moze pristupit. Ak by to tak nebolo, tak ani po odstraneni
>> fpacked-struct by sa nemohlo k jednotlivym polozkam pristupovat inak ako
>> po bytoch.
>> 
>> Hento podla mna najdete v bugzille gcc ako poziadavku aby sa to vylepsilo v
>> tomto smere, nejdem to hladat.
>> 
>> wek
>> 
>> 
>> 
>> ----- Original Message ---------------
>>> Nikoli možná, ale zcela určitě. U Cortex-M0 je nezarovnaný přístup velký
>>> problém, takže překladač to rozložit vlastně musí. Pořád je to lepší než
>>> u starých verzí, kdy to rovnou spadlo do hardfaultu. Takže data, která
>>> zapisujete (čtete) musí mít explicitní zarovnání pomocí např.
>>> __attribute__ ((aligned (4))). U Cortex-M3,4 tohle dělat nemusíte, ale
>>> ani tam to není na škodu - mělo by to být o něco efektivnější.
>>>
>>> Mrazík
>>>
>>> Dne 17.8.2018 v 13:09 Jaroslav Buchta napsal(a):
>>>> ...
>>>>   Mozna je to i tim, ze struktura nema
>>>> attribut zarovnani na 4B.
>> 



Další informace o konferenci Hw-list