C: #define, XC8
Miroslav Draxal
evik na volny.cz
Pátek Červen 15 18:40:52 CEST 2018
To je mi jasné, ale není mi jasné, jak inline funkci předhodím parametr funkce buď uint8_t nebo uint16_t
Static online void delay_ms(????? DelayTime)
Míra
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Tomáš Hamouz
Sent: Friday, June 15, 2018 4:26 PM
To: HW-news
Subject: Re: C: #define, XC8
inline funkce je taková která se nevolá CALLem, ale místo toho se rozvine místo toho volání. V praxi pak máte tutéž funkci implementovanou na mnoho místech.
Ve Vašem případě pokud byste volal příslušnou rozhodovací funkci s konstantním parametrem, optimalizátor pozná že podmínka je konstantní a nevyužitý kód vyhází pryč.
Tedy rozhodování zda se zavolá uint8_t či uint16_t verze se ponechá na optimalizátoru. Je možné že bude generovat warningy že se rozhodujete podle konstantího výrazu.
Tomáš
> Můžeme to trochu rozvést?
> Mám dvě funkce, které provádějí totéž, jedna ovšem s uint8_t a druhá s uint16_t.
> Čili
> void xx1(uint8_t);
> void xx2(uint16_t);
> Chtěl jsem, aby preprocesor si podle hodnoty při volání funkce sám rozhodl, kterou funkci použije.
> Jak jste to myslel s tím static inline?
> Musím se přiznat, že o tom inline jsem slyšel poprvé. Ale co jsem
> se o tom přečetl v pdf k XC8, tak podle mě to můj problém neřeší.
> Míra
> -----Original Message-----
> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Jan Waclawek
> Sent: Thursday, June 14, 2018 9:14 PM
> To: HW-news
> Subject: Re: C: #define, XC8
> Nie:
> 1. ak to mate napisane tak, ako vidime, t.j. medzi jednotlivymi riadkami je
> prazdny riadok, tak tie spatne lomitka su neucinne - tie "zozeru" vzdy len
> jedno zariadkovanie
> 2. ak tam tie prazdne riadky nemate, tak v 2. faze prekladu (C99 5.1.1.2)
> sa vyhadzu spatne lomitka na konci riadkov a pripoja sa k nim riadky za
> nimi nasledujuce. Ale to znamena, ze vo faze 4, ked sa maju vykonavat tie
> preprocesorove direktivy, tak to #if uz nie je preprocesorova direktiva,
> lebo nie je na zaciatku riadku (6.10#2)
> Ale nerobte si vrasky, napiste pokojne funkciu s tymto istym obsahom,
> oznacte static inline, a kazdy slusny (a polovica tych neslusnych)
> prekladac urobi to co chcete.
> Ledazeby ste mali vypnutu optimalizaciu, co je blbost.
> wek
> ----- Original Message ---------------
> Subject: C: #define, XC8
> From: "Miroslav Draxal" < <mailto:evik na volny.cz> evik na volny.cz>
> Date: Thu, 14 Jun 2018 19:51:24 +0200
> To: "'HW-news'" < <mailto:hw-list na list.hw.cz> hw-list na list.hw.cz>
> Dobrý den,
> Existuje nìjaká mo¾nost, rozchodit následující?
>
> void delay_ms_uint16_t(uint16_t DelayTime);
> void delay_ms_uint8_t(uint8_t DelayTime);
>
> # define delay_ms(DelayTime) \
> #if DelayTime < 256 \
> delay_ms_uint8_t(DelayTime) \
> #else \
> delay_ms_uint16_t(DelayTime) \
> #endif
>
> Ztrozkotá to na "illegal "#" directive"
> Díky za nápady.
> Míra
> _______________________________________________
> HW-list mailing list - sponsored by <http://www.HW.cz> www.HW.cz
<mailto:hw-list na list.hw.cz> > Hw-list na list.hw.cz
<http://list.hw.cz/mailman/listinfo/hw-list> > http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list - sponsored by <http://www.HW.cz> www.HW.cz
<mailto:hw-list na list.hw.cz> > Hw-list na list.hw.cz
<http://list.hw.cz/mailman/listinfo/hw-list> > http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20180615/49bc07da/attachment.html>
Další informace o konferenci Hw-list