Zarovnani v LPC11U68

Josef Štengl ok1ced na nagano.cz
Pondělí Červenec 11 16:25:09 CEST 2016


Pokud to chápu správně, tak si neodporujete.

Kompilátor začal řešit nezarovnané přístupy - to jest když není zarovnáno, tak to může zpracovat pouze více instrukcemi  - 
jinak to spadne do hard fault, tak to vyřešili takto (rozhodne se dle cílové architektury při překladu).

A pokud to zarovnáte (požadavkem aligned), tak to přečte najednou a tím je to urychleno, respektive nezpomaleno.

Nebo jsem něco jsem minul?


Ale chyba není v kompilátoru, ta je při psaní, protože provádíte konverzi z char na int a to by se dělat nemělo a je na 
kompilátoru, jak to zpracuje. Atribut align je jen berlička.

Dobrá já vím, jde to a je to efektivní, asi bych to také tak napsal. To jen to moje ego :-D

Hezký den.

Dne 11.7.2016 v 12:42 Tomáš Hamouz napsal(a):
> Až dosud jsem byl přesvědčen že __attribute((aligned(n)))) je
> _požadavek_ na compiler/linker, aby danou proměnnou umístil dle
> požadavku, nikoliv informace jak je proměnná zarovnaná.
>
> Tedy říkáte jak "má být", nikoliv jak "je".
>
> Tomáš
>
>
>> 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.
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>


Další informace o konferenci Hw-list