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