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