AVR-GCC i glupi problem



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Darek R." <drzonca_at_nospam_w.pl>
Subject: AVR-GCC i glupi problem
Date: Sun, 4 Apr 2004 21:00:27 +0200


Witam!
Mam problem - wydawałoby się dość głupi... Mam zmiennš ośmiobitowš (unsigned
char) i chcę sprawdzić stan trzech najmłodszych bitów. Jeżeli napiszę tak:
if ( i & 7 )
to kompilator najpierw promuje zmiennš na int (16 bit) i siódemkę też
trakuje jako int - ok, tak jest w standardzie C, nie będę go zmieniał.
Jednak jeśli napisze tak
if ( (unsigned char) ( i & 7 ) )
albo tak:
if ( i & (unsigned char) 7 )
czy nawet tak
if ( (unsigned char) ( (unsigned char) i & (unsigned char) 7 ) )
to wynik kompilacji i tak jest identyczny (promocja do inta). Jeśli zamiast
siódemki byłaby inna zmienna to robišc tak jak wyżej da się przekonać
kompilator że chcę wykonać AND na liczbach ośmiobitowych - ale jak to zrobić
z bezpośredniš wartościš?

--
Pozdrowienia
Dariusz Rzońca


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.atman.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Krzysztof Rudnik <rudnik_at_nospam_kki.net.pl>
Subject: Re: AVR-GCC i glupi problem
Date: Sun, 04 Apr 2004 21:25:54 +0200


Darek R. wrote:

Witam!
Mam problem - wydawałoby się dość głupi... Mam zmienną ośmiobitową
(unsigned char) i chcę sprawdzić stan trzech najmłodszych bitów. Jeżeli
napiszę tak: if ( i & 7 )
to kompilator najpierw promuje zmienną na int (16 bit) i siódemkę też
trakuje jako int - ok, tak jest w standardzie C, nie będę go zmieniał.
Jednak jeśli napisze tak
if ( (unsigned char) ( i & 7 ) )
albo tak:
if ( i & (unsigned char) 7 )
czy nawet tak
if ( (unsigned char) ( (unsigned char) i & (unsigned char) 7 ) )
to wynik kompilacji i tak jest identyczny (promocja do inta). Jeśli
zamiast siódemki byłaby inna zmienna to robiąc tak jak wyżej da się
przekonać kompilator że chcę wykonać AND na liczbach ośmiobitowych - ale
jak to zrobić z bezpośrednią wartością?


Moze '\x7'

Krzysiek Rudnik


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!wsisiz.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Darek R." <drzonca_at_nospam_w.pl>
Subject: Re: AVR-GCC i glupi problem
Date: Sun, 4 Apr 2004 22:56:38 +0200


Krzysztof Rudnik napisał:
Moze '\x7'

Dalej promuje do inta.

--
Pozdrowienia
Dariusz Rzońca


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Gissbourne" <gissbourne_at_nospam_poczta.onet.pl>
Subject: Re: AVR-GCC i glupi problem
Date: Tue, 6 Apr 2004 11:50:59 +0200



Użytkownik "Krzysztof Rudnik" <rudnik_at_nospam_kki.net.pl> napisał w wiadomości
news:c4pq48$13a5$1_at_nospam_news.atman.pl...

napiszę tak: if ( i & 7 )

Moze '\x7'

Nie znam GCC, ale sprobuj 7u
Pozd
Gissbourne



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Darek R." <drzonca_at_nospam_w.pl>
Subject: Re: AVR-GCC i glupi problem
Date: Wed, 7 Apr 2004 00:13:06 +0200


Gissbourne napisał:
Nie znam GCC, ale sprobuj 7u

Nadal promocja do inta.

--
Pozdrowienia
Dariusz Rzońca


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!pwr.wroc.pl!panorama.wcss.wroc.pl!news.man.poznan.pl!news.nask.pl!news.cyf-kr.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: AVR-GCC i glupi problem
Date: Sun, 4 Apr 2004 21:33:00 +0200


Użytkownik "Darek R." <drzonca_at_nospam_w.pl> napisał w wiadomości news:c4pm9r$73j$1_at_nospam_nemesis.news.tpi.pl...
Witam!
Mam problem - wydawałoby się dość głupi... Mam zmiennš ośmiobitowš (unsigned
char) i chcę sprawdzić stan trzech najmłodszych bitów. Jeżeli napiszę tak:
if ( i & 7 )
to kompilator najpierw promuje zmiennš na int (16 bit) i siódemkę też
trakuje jako int - ok, tak jest w standardzie C, nie będę go zmieniał.
Jednak jeśli napisze tak
if ( (unsigned char) ( i & 7 ) )
albo tak:
if ( i & (unsigned char) 7 )
czy nawet tak
if ( (unsigned char) ( (unsigned char) i & (unsigned char) 7 ) )
to wynik kompilacji i tak jest identyczny (promocja do inta). Jeśli zamiast
siódemki byłaby inna zmienna to robišc tak jak wyżej da się przekonać
kompilator że chcę wykonać AND na liczbach ośmiobitowych - ale jak to zrobić
z bezpośredniš wartościš?
...

chcesz jak najbardziej minimalny kod wynikowy ?
to sprobuj z dodatkowa zmienna:


register unsigned char tmp;

tmp = val & 7;

if( tmp ) {
// ...
}

--
Andrzej






========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Darek R." <drzonca_at_nospam_w.pl>
Subject: Re: AVR-GCC i glupi problem
Date: Sun, 4 Apr 2004 21:43:17 +0200


Andy napisał:
chcesz jak najbardziej minimalny kod wynikowy ?
to sprobuj z dodatkowa zmienna:


register unsigned char tmp;

tmp = val & 7;

if( tmp ) {
// ...
}

Ok, to działa tak jak powinno (czyli na 8 bitach) - dzięki. A bez dodatkowej
zmiennej nie da się wytłumaczyć kompilatorowi ze ja nie chcę inta?

--
Pozdrowienia
Dariusz Rzońca


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!feed.news.interia.pl!news.cyf-kr.edu.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anokWYTNIJ_at_nospam_ceti.pl>
Subject: Re: AVR-GCC i glupi problem
Date: Mon, 5 Apr 2004 18:13:54 +0200


Użytkownik "Darek R." <drzonca_at_nospam_w.pl> napisał w wiadomości news:c4poi1$i0i$1_at_nospam_atlantis.news.tpi.pl...
...
Ok, to działa tak jak powinno (czyli na 8 bitach) - dzięki. A bez dodatkowej
zmiennej nie da się wytłumaczyć kompilatorowi ze ja nie chcę inta?
...

nie wiem
nic innego nie wymyslilem

moze ktos inny jeszcze cos madrego napisze

--
Andrzej



========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "T.G." <gunday_at_nospam_poczta.onet.pl>
Subject: Re: AVR-GCC i glupi problem
Date: Mon, 5 Apr 2004 23:02:39 +0200


Ok, to działa tak jak powinno (czyli na 8 bitach) - dzięki. A bez
dodatkowej
zmiennej nie da się wytłumaczyć kompilatorowi ze ja nie chcę inta?

Ale skoro to zmienna rejestrowa, to po co żałować na nią?
Jest lokalna (można dodać klamerki).
Przecież optymalność nie zależy od długości listingu
w C, tylko od kodu wynikowego i wykorzystania pamięci.

TG.



========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.mega.net.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Darek R." <drzonca_at_nospam_w.pl>
Subject: Re: AVR-GCC i glupi problem
Date: Wed, 7 Apr 2004 00:30:46 +0200


T.G. napisał:
Ale skoro to zmienna rejestrowa, to po co żałować na nią?
Jest lokalna (można dodać klamerki).
Przecież optymalność nie zależy od długości listingu
w C, tylko od kodu wynikowego i wykorzystania pamięci.

Niby racja. Dziwi mnie tylko że nie mozna przetłumaczyć kompilatorowi że nie
chcę żadnej niejawnej konwersji. Jakoś do tej pory w najróżniejszych
kompilatorach C (a pisałem w różnych kompilatorach na rózne platformy) w
podobnych przypadkach zawsze dało się uniknąć niechcianej niejawnej
konwersji jawnie podając mu typ - więc po prostu byłem mocno zdziwiony jak
przeglądając kod asemblerowy zobaczyłem co kompilator z tym zrobił mimo
moich wysiłków żeby temu zapobiec.
Tak trochę na marginesie - moim prywatnym zdaniem niejawne konwersje są
największą zmorą C. Ile razy siedziałem szukając głupiego błędu bo
zapomniałem że tu kompilator może dokonać niejawnej konwersji... IMHO nie
powinno być absolutnie żadnych niejawnych konwersji, nawet w oczywistych
przypadkach - kompilator powinien zgłosić niezgodność typów, programista
wstawić jawną konwersję (wiedząc co robi i że tego chce) i życie byłoby duzo
prostsze.

--
Pozdrowienia
Dariusz Rzońca


========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.gazeta.pl!opal.icpnet.pl!topaz.icpnet.pl!not-for-mai