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