switch-case AVR - GCC

Miroslav Mraz mrazik na volny.cz
Sobota Březen 21 19:42:17 CET 2020


Na to se nedá dát jednoznačná odpověď, když do toho kódu nevidíte. 
Jestli je to Arduino, může to mít na zásobníku všechno možné. S tím, že 
by switch-case měl nějaké omezení jsem se nesetkal, ale bez optimalizace 
se toho na zásobník uloží patrně víc než s optimalizací, takže přetečení 
zásobníku bych považoval za možné.
Já píšu v C++ a na zásobníku mám pak skoro všechna data, globální 
proměnné jsou jen pár ukazatelů potřebných pro přerušení. Pak je runtime 
analýza zásobníku nutná. Má to na druhou stranu docela výhody - pokud 
data nepotřebujete, automaticky se zahodí, takže toho můžete do jednoho 
procesoru nacpat daleko víc.
Další věc - switch se obvykle dělá pomocí enum a to může mít na AVR typ 
o šířce 1 byte. Ale teď jsem to zkoušel a i když mu to vnutím pomocí 
-fshort-enums, pak pokud se s číslováním dostanu nad 256, pak se 
automaticky rozšíří typ na 2 byty. Takže ani tady omezení není. Třeba 
někdo, kdo s tím víc dělá najde něco jiného, mne už nic víc nenapadá.

Mrazík

Dne 21. 03. 20 v 18:43 Lukac Michal napsal(a):
> Dobry den,
> Je nejake obmedzenie pre prikaz switch-case?
> Ked je vela case prepinacov a este su tam aj vnorene switch-case tak pri 
> urcitom pocte prestane fungovat. Ten pocet zavisi od kodu co je vnutri.
> Ked sa niektore case zmazu je jedno ktore, opat to funguje. Toto sa 
> sprava pri optimalizacii -Os bez optimalizacie a pri -O2 to funguje 
> normalne.
> pretecenim pamate by to nemalo byt, globalne premenny zaberaju okolo 
> 30%, je tam 8k a ani nejake extremne volanie funkcii tam nie je.
> Nejak som to blizsie neskumal ani nemam ten kod, volal mi len jeden 
> znamy ci neviem poradit. V podstate to je vyriesene tou optimalizaciou, 
> ja len ci to nie je nejaka znama chyba alebo tak...
> michal.
> 
> _______________________________________________
> 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