Fwd: STM CUBE - zkusenosti

Jan Waclawek konfera na efton.sk
Pondělí Říjen 5 10:45:25 CEST 2015


>V±echno se vyvíjí. Před pár lety jsme zde diskutovali, zda konstrukce
>   static const uint8_t pole[] = {1,2,3,4,5,6};
>   volatile uint32_t x = * (uint32_t *) (pole + 1);
>je korektní nebo ne. Tehdy to na Cortex-M0 padalo do hard-fault, dne±ní 
>verze gcc (4.9.3) to přeloµí korektně. Stále ale platí, µe při podobném 
>přetypování je lépe se podívat do listingu, co s tím vlastně překladač 
>provedl.

Z pohladu normy je to stale rovnako ako pred tymi par rokmi implementation
defined, norma priamo varuje ze to moze byt "trap".

Inaksie povedane, type punning, ci uz takto cez pretypovanie pointra alebo
cez union je neprenositelny. To je vlastne ten "vyvoj" - treba to chapat
skor ako rozsirenie gcc nez ako vseobecne spravny zapis.

Tym netvrdim, ze ja osobne to nepouzivam - pouzivam, ako aj ine
neprenositelne konstrukcie.

Nie je vylucene, ze casom C alebo C++ dospeje k zapisu, ktorym programatori
nejakym citatelnym a konzistentnym sposobom budu vediet prekladacu
"povedat" ze chcu urobit ten type punning, ale zatial to tak nie je, takze
to treba akceptovat ako fakt.

(Inak ja osobne sa snazim vyvarovat aj zapisu (pole + 1), radsej to zapisem
&(pole[1]), bo na pointrovej aritmetike som sa uz tiez niekolkokrat
neprijemne popalil; ale to je len osobna preferencia to nema nic spolocne
s normou ani prekladacmi)


wek





Daląí informace o konferenci Hw-list