C: #define, XC8

Miroslav Draxal evik na volny.cz
Pátek Červen 15 18:38:45 CEST 2018


Já vím, jakou hodnotu bude mít parametr. Nejedná se o jeden projekt, ale o mou obecnou knihovnu, kterou používají 10Fxx,12Fxx,18Fxx. 

Konkrétně mi jde o funkci delay_ms. Podle názvu je jasné o co jde. XC8 má makro __delay_ms. Pokud mám v programu např. 10x delay_ms, pokaždé s jinou délkou čekání v ms, potom mi to pokaždé přeloží na správnou délku čekání, ale optimalizace jde docela do kopru, protože si to pokaždé vytvoří kód pro konkrétní délku čekání. No a proto (hlavně u 10f) používám

void delay_ms_uint8_t(uint8_t DelayTime) {
    do {
        __delay_ms(1);
    } while (--DelayTime);
}

A
 void delay_ms(uint16_t DelayTime) {
    do {
        __delay_ms(1);
    } while (--DelayTime);
}

Chtěl jsem, aby si preprocesor vybral sám, tu funkci, kterou potřebuje.
A jak to tak vypadá, možná se naučím i něco nového. )viz inline

Prosím, nepiště, že ušetřím jeden byt z uint8_t a pár bytu v programu. To je irelevantní.
Míra


-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Petr Labaj
Sent: Friday, June 15, 2018 5:53 PM
To: hw-list na list.hw.cz
Subject: Re: C: #define, XC8

Vy při programování víte, jakou hodnotu bude mít parametr?
Pokud ano, tak přece může sám zavolat tu správnou funkci (makro).
Pokud ne, tak jak to ve fázi překladu může vědět kompilátor?

PL

************************

Dne 15.6.2018 v 16:10 Miroslav Draxal napsal(a):
> 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.
>

_______________________________________________
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