Jak vynutit sekvencni provadeni prikazu u GCC ?
Miroslav Mraz
mraz na seznam.cz
Pondělí Únor 24 15:19:27 CET 2014
Nebylo by lépe počítat
amp *= 20019;
amp >>= 10;
protože ten shift bude rychlejší než dělení ?
Mrazík
On 02/24/2014 01:14 PM, Jaroslav Buchta wrote:
> Pro avr jsem napsal tuto fci:
>
> void UpdateAmp()
> {
>
> cli();
> uint32_t amp = adc_chvals[3];
> sei();
>
>
> amp *= 20000;
> amp /= 1023;
> uint32_t ampcorrr = 45000UL + amp;
>
> cli();
> pwmAmplitude = (uint16_t)ampcorrr;
> sei();
>
>
> }
>
> A problem je, ze deleni 1023 se zaradi pri zapnute optimalizaci az za
> cli() coz je samozrejme velmi spatne protoze trva dost dlouho.
> Pomuze vypnout optimalizaci pro tuto funkci
> (__attribute__((optimize("-O0"))); ) a pomuze i pokud obe lokalni
> promenne definuju jako volatile - to ale nevim, jestli je spolehlive.
> Existuje nejaka elegantnejsi metoda?
>
Další informace o konferenci Hw-list