gcc, arm, pristup k periferiim

Miroslav Mraz mrazik na volny.cz
Pátek Srpen 17 20:41:36 CEST 2018


Tak jsem si s tím navečer ještě trochu pohrál a je zřejmé, že tohle 
chování opravdu někdo považoval za bug a opravil to. Ve verzi gcc 4.9.2 
už se mi nepovede dostat statické struktury nebo uint32_t na lichou 
adresu. Takže opravdu pomůže nepakovat struktury.
Ten překladač se vyvíjí docela rychle a k lepšímu. Původní chování pro 
nezarovnaná data na Cortex-M0 bylo, že to prostě spadlo, pak to 
rozsekali na bytové přesuny a v této verzi je to tak, že je obtížné 
nezarovnaná data vytvořit a pokud se to povede, pak to teprve vede na 
bytové přesuny. Takže se omlouvám za nepřesnou formulaci.

Mrazík

Dne 17.8.2018 v 15:55 Miroslav Mraz napsal(a):
> 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
> 


Další informace o konferenci Hw-list