Zarovnani v LPC11U68

Miroslav Mraz mrazik na volny.cz
Pondělí Červenec 11 09:07:08 CEST 2016


Kompilátor to od určité verze (~4.8.x) začal do jisté míry řešit. Přece 
jen není moc dobré, když vyprodukovaný kód skončí v hard fault. A právě 
proto, že to kompilátor začal řešit, je zarovnání dat docela důležité. 
Když strukturu, resp. pole struktur správně zarovnáte a řeknete 
překladači (právě tím __attribute((aligned(n)))) jak je zarovnána, 
umožníte mu dělat lepší optimalizaci. Některé funkce tím lze urychlit až 
na dvojnásobek.

Mrazík

Dne 11.7.2016 v 06:13 jiri na bezstarosti.cz napsal(a):
> Pouzivam GCC, pisu to takhle, bez toho se zarovnava podle typu.
>
> #define ALIGN4 __attribute((aligned(4)))
> uint8_t dispdata[1024] ALIGN4 ={
> 		0x00,0x00,0x00,0x00
> ...
>
> Takhle to pro Cortex-M0 pisu, kdyz vim, ze si pro data nekde sahnu treba
> jako pro uint32_t a deklarovano je uint8_t (zde to bylo kvuli rychlejsimu
> prehazovani dat po jakesi videopameti LCD).
>
> Kdyz si Cortex-M0 sahne pro nezarovnana data, skonci v HardFault, to
> neumi, a kompilator to neresi.
>
> J.B.


Další informace o konferenci Hw-list