Zachowanie funkcji delay w WINAVR z optymalizacją -O3 dla AT90S8535

dziwne zachowanie WINAVR czyli AVR-GCC





Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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