Zachowanie funkcji delay w WINAVR z optymalizacją -O3 dla AT90S8535
dziwne zachowanie WINAVR czyli AVR-GCC
From: "Piter" <pit202_spam__at_nospam_wp.pl>
Subject: dziwne zachowanie WINAVR czyli AVR-GCC
Date: Tue, 17 Feb 2004 08:17:34 +0100
witam,
wczoraj sciagnelem najnowsza wersje ze strony,
napisalem prosty programik na AT90S8535,
ustawilem licznik aby przepelnialo sie 1000/sec
dopisalem odp. procedurke ujmującą a w niej
if ( DELAY ) DELAY--;
to działa , ale , potem mam funkcje :
void delay(unsigned int time ) {
DELAY=time;
while(DELAY);
}
i teraz, dziwna sprawa polega na tym, ze jak skompiluje
bez optymizacji , to funjca delay dziala, natomiast
jesli skompiluje z parametrem " -O3 " to mimo tego,
ze w DELAY jest wartosc zero, nie chce wyjsc z petli
while. Troche tego nie rozumiem.
debugowalem dwoma programami : avr-studio v4.07 i vmlab
w obydwu mialem takie same objawy.
--
PiteR
gg#87464 mail: pit202_at_wp.pl
icq#222864844 site: not_ready
========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!news.nask.pl!news.itl.waw.pl!not-for-mai
From: "Jacek R. Radzikowski" <jacek+maqmba_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: dziwne zachowanie WINAVR czyli AVR-GCC
Date: Tue, 17 Feb 2004 07:23:39 +0000 (UTC)
Piter <pit202 spam_at_nospam_wp.pl> wrote:
witam,
wczoraj sciagnelem najnowsza wersje ze strony,
napisalem prosty programik na AT90S8535,
ustawilem licznik aby przepelnialo sie 1000/sec
dopisalem odp. procedurke ujmującą a w niej
if ( DELAY ) DELAY--;
to działa , ale , potem mam funkcje :
void delay(unsigned int time ) {
DELAY=time;
while(DELAY);
}
i teraz, dziwna sprawa polega na tym, ze jak skompiluje
bez optymizacji , to funjca delay dziala, natomiast
jesli skompiluje z parametrem " -O3 " to mimo tego,
ze w DELAY jest wartosc zero, nie chce wyjsc z petli
while. Troche tego nie rozumiem.
debugowalem dwoma programami : avr-studio v4.07 i vmlab
w obydwu mialem takie same objawy.
jak zadeklarowales DELAY?
j.
========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!news.internetia.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai
From: Artur Lipowski <LAL_at_nospam_pro.onet.pl>
Subject: Re: dziwne zachowanie WINAVR czyli AVR-GCC
Date: Tue, 17 Feb 2004 08:31:22 +0100
Piter wrote:
...
debugowalem dwoma programami : avr-studio v4.07 i vmlab w obydwu
mialem takie same objawy.
A podglądałeś wygenerowany kod?
IMHO ta pętla jest przez kompilator zupełnie usuwana (co jest zgodne z
dokumentacją).
BTW> dlaczego nie używasz gotowych funkcji delay_loop1 lub delay_loop2
Pozdrawiam,
--
Artur Lipowski
========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!newsfeed.media.kyoto-u.ac.jp!newsfeed.icl.net!newsfeed.fjserv.net!skynet.be!195.114.173.131.MISMATCH!news.internetia.pl!newsfeed.gazeta.pl!news.dialog.net.pl!not-for-mai
From: "Piter" <pit202_spam__at_nospam_wp.pl>
Subject: Re: dziwne zachowanie WINAVR czyli AVR-GCC
Date: Tue, 17 Feb 2004 08:39:52 +0100
debugowalem dwoma programami : avr-studio v4.07 i vmlab w obydwu
mialem takie same objawy.
A podglądałeś wygenerowany kod?
IMHO ta pętla jest przez kompilator zupełnie usuwana (co jest zgodne z
dokumentacją).
nie - tego nie robilem, wiedzialem ze cos za duzo usuwa, lecz nie
wiedzialem dlaczego - dalej nie wiem, jak mozna usunac taką funkcje ?
BTW> dlaczego nie używasz gotowych funkcji delay_loop1 lub delay_loop2
hmm, trudno powiedziec, chyba ich nie znam, dopiero sie ucze - raczkuje
DELAY jest zadeklarowane globalnie tez jako "unsigned int"
--
PiteR
gg#87464 mail: pit202_at_wp.pl
icq#222864844 site: not_ready
========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!news.nask.pl!news.itl.waw.pl!not-for-mai
From: "Jacek R. Radzikowski" <jacek+maqmba_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: dziwne zachowanie WINAVR czyli AVR-GCC
Date: Tue, 17 Feb 2004 08:04:54 +0000 (UTC)
Piter <pit202 spam_at_nospam_wp.pl> wrote:
debugowalem dwoma programami : avr-studio v4.07 i vmlab w obydwu
mialem takie same objawy.
A podglądałeś wygenerowany kod?
IMHO ta pętla jest przez kompilator zupełnie usuwana (co jest zgodne z
dokumentacją).
nie - tego nie robilem, wiedzialem ze cos za duzo usuwa, lecz nie
wiedzialem dlaczego - dalej nie wiem, jak mozna usunac taką funkcje ?
BTW> dlaczego nie używasz gotowych funkcji delay_loop1 lub delay_loop2
hmm, trudno powiedziec, chyba ich nie znam, dopiero sie ucze - raczkuje
DELAY jest zadeklarowane globalnie tez jako "unsigned int"
zadelkaruj DELAY jako volatile unsigned int. To powinno powstrzymac
kompilator od nadmiernej optymalizacji
j.
========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!news.task.gda.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai
From: Artur Lipowski <LAL_at_nospam_pro.onet.pl>
Subject: Re: dziwne zachowanie WINAVR czyli AVR-GCC
Date: Tue, 17 Feb 2004 09:12:45 +0100
Piter wrote:
nie - tego nie robilem, wiedzialem ze cos za duzo usuwa, lecz nie
wiedzialem dlaczego - dalej nie wiem, jak mozna usunac taką funkcje ?
A dlaczego nie, przecież z punktu widzenia kompilatora nic sensownego
nie robi oprócz zmieniania wartości jakiejś zmiennej, która jest dalej
nie używana (i nie jest volatile).
Kuknij do dokumentacji GCC opisującej co może zrobic kompilator na
poszczególnych poziomach optymalizacji.
Przyzwyczaj się też, że oglądanie wyprodukowanego assemblera będzie
normalną praktyką (avr-objdump twoim przyjacielem 8-).
hmm, trudno powiedziec, chyba ich nie znam, dopiero sie ucze - raczkuje
...
Jak to mówią - najlepiej się uczyć na cudzych błędach 8-)
Twój problem (plus jego odmiana z "niewidzeniem" zmian wykonanych przez
obsługę przerwania w wartosci zmiennych globalnych) pojawia się średnio
raz na tydzień na forum AVR-GCC na AVRFreaks.
Tak zwany "problem" volatile występuje równiez jako FAQ #1 w
dokumentacji avr-libc.
Pozdrawiam,
--
Artur Lipowski
========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!newsfeed.gazeta.pl!news.dialog.net.pl!not-for-mai
From: "Piter" <pit202_spam__at_nospam_wp.pl>
Subject: Re: dziwne zachowanie WINAVR czyli AVR-GCC
Date: Tue, 17 Feb 2004 13:50:54 +0100
Jak to mówią - najlepiej się uczyć na cudzych błędach 8-)
Twój problem (plus jego odmiana z "niewidzeniem" zmian wykonanych przez
obsługę przerwania w wartosci zmiennych globalnych) pojawia się średnio
raz na tydzień na forum AVR-GCC na AVRFreaks.
Tak zwany "problem" volatile występuje równiez jako FAQ #1 w
dokumentacji avr-libc.
tak - racja, doskokowy internet ma w tym przypadku duze wady
z ktorymi musze sie pogodzic i męczyć.
dzieki za wszystkie odpowiedzi - wieczorkiem wzmagan C.D.
--
PiteR
========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!news.internetia.pl!not-for-mai