gcc, arm, pristup k periferiim
Miroslav Mraz
mrazik na volny.cz
Pátek Srpen 17 15:55:16 CEST 2018
Je moc horko na to abych to dohledával, tedy jen tak v rychlosti. Ono se
to týká spíš třeba datového registru, nastavení se obvykle dělá zápisem
konstanty a ta vůbec nemusí mít a zpravidla nemá pevné místo v paměti,
čímž se problém zjednoduší. Takže zápis do registru
REGISTER = data;
u Cortex-M0 musí mít zarovnanou adresu na levé i pravé straně. Levá je
adresa registru a s tím není problém (pokud jí nepředáváte jak správně
píšete nevhodným způsobem).
Stalo se mi, že pokud byla proměnná data deklarována jako statická
uint32_t, linker jí plácnul opravdu na lichou adresu a gcc to rozsekal
na bytové operace. Přepínače asi už nedohledám, ale tím atributem
zarovnání se to spravilo, takže už jsem nad tím dál nehloubal. Zřejmě se
při optimalizaci -Os na délku optimalizuje i sekce .data příp. .bss, ale
nijak si za tímto vysvětlením nestojím. Prostě Cortex-M0 je mrcha a musí
se na to dávat víc bacha.
Jestli to pomůže panu kolegovi Smržovi nevím, ale určitě si z toho vezme
nějaké ponaučení. Já jsem ten jeho kousek nepřekládal, lenost převážila,
ale z toho kousku stejně není jasné jakou hodnotu bude mít parametr
SPI_HandleTypeDef *hspi a ten je docela podstatný. Pokud není zarovnaný
nebo překladač neví jak je zarovnán, nastane patrně tento problém. Bez
ohledu na to jestli je tato struktura pakována nebo ne.
Mrazík
Dne 17.8.2018 v 15:07 Jan Waclawek napsal(a):
>> 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
>
Další informace o konferenci Hw-list