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