gcc 4.2.0 a "-Os -mcall-prologues"?
Petr Tomasek
tomasek@etf.cuni.cz
Neděle Srpen 19 00:06:28 CEST 2007
Zdravim!
Zlobi me avr-gcc 4.2.0: pri optimalizaci "-Os -mcall-prologues"
z nepochopitelnych duvodu nejsou IO registry prekladacem
vnimany jako "volatile" (prestoze jsou tak nadeklarovany)
a gcc pak produkuje naprosto nesmyslny kod. Napr. nasledujici
funkci (ovladani LCD radice):
void lcd_data(unsigned char d) {
unsigned char dd;
PORTDRS|=(1<<LCDRS);
dd=d/16;
PORTD=(PORTD & LCDMASK)|dd;
lcd_enable();
dd=d%16;
PORTD=(PORTD & LCDMASK)|dd;
lcd_enable();
delay50u();
}
prelozi tak, ze hodnotu do registru PORTD zapise POUZE JEDNOU,
coz, jak jiste tusite neprinese cileny vysledek.
Muj dotaz je, jestli je to nejak ocekavane chovani,
nebo se jedna o chybu gcc. Setkal jste se s tim nekdo?
Diky!
P.T.
--
Petr Tomasek <http://www.etf.cuni.cz/~tomasek>
Jabber: butrus@jabbim.cz
Další informace o konferenci Hw-list