Jak vynutit sekvencni provadeni prikazu u GCC ?

Jan Waclawek konfera na efton.sk
Pondělí Únor 24 14:11:07 CET 2014


Toto je znamy problem.

https://www.mikrocontroller.net/topic/65923

Pokial viem, na toto neexistuje definitivne riesenie.

Vdaka memory clobberu v cli()/sei() to volatile amp sice symptomaticky
pomohlo (tak ako pomaha v tom atomic_block), pretoze tym imituje volatile
pristup instrukcii cli/sei aj ked v skutocnosti tie instrukcie nic s
pamatou nerobia, ale ucel memory je iny a nie je zarucene, ze aj v
buducich verziach gcc to bude ako takato "bariera" fungovat. 

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=94571

Pomohlo to pochopitelne preto, lebo aj je amp volatile, to =/ vyzaduje aj
citanie aj zapis, takze sa samotne delenie nemoze preusporiadat cez ine
volatile pristupy. Na druhej strane je kazde neodovodnene pouzitie
volatile plytvanie a je vhodne prepisat tu aritmetiku tak, aby tych
pristupov bolo co najmenej.

Lepsie riesenie nepoznam. V gcc ako takom sa sice objavili rozne zaujimave
zabudovane funkcie ako aj v horeuvedenom vlakne spominane __sync_xxx() ,
ale ich implementacia v avr-gcc() je otazna. Bohuzial, Atmel vykradol
pracu nadsencov na GNU tooloch bez toho, aby nieco relevantne (featury,
dokumentaciu) do neho vratil.

wek




----- Original Message ---------------

>a nepomoze atomic_block?
>
>http://www.nongnu.org/avr-libc/user-manual/group__util__atomic.html
>
>m.
>
>
>-----Original Message----- 
>
>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