Zagadkowe błędy kompilacji z unsigned long w Keil C dla mikrokontrolera '51

KEIL+kompilator C == bledy ?





Poprzedni Następny
Wiadomość
Spis treści
From: =?ISO-8859-2?Q?Robert_=A3opatecki?= <rora_at_nospam_poczta.onet.pl>
Subject: KEIL+kompilator C == bledy ?
Date: Thu, 29 Jan 2004 11:19:22 +0100


Witam Wszystkich,
podczas pisania programu w C
na '51 w Keil-u znalazlem taka mala
dziwnostke:

unsigned long wynik;
wynik=20000+50000; (po kompilacji wynik=0x011170 czyli poprawnie)

natomiast:

unsigned long wynik;
wynik=7*10000; (po kompilacji wynik=0x01170 czyli nie poprawnie)

I mam do Was takie pytanko, czy moglby to ktos
sprawdzic ? Moze to akurat ja mam cos nie tak
ustawione ?
Z gory Dzieki.

Pozdrowka
Robert


========
Path: news-archive.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: Marcin E. Hamerla <Xmehamerla_at_nospam_Xpro.Xonet.Xpl.remove_X>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Thu, 29 Jan 2004 11:25:44 +0100


Robert Łopatecki napisal(a):

unsigned long wynik;
wynik=7*10000; (po kompilacji wynik=0x01170 czyli nie poprawnie)

To jest Ok. Zrob tak:

wynik=(unsigned long)7*10000;

lub

wynik=7*(unsigned long)10000;

--
Pozdrowienia, Marcin E. Hamerla

- What about your soul?
- I'm an engineer.

========
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: =?ISO-8859-2?Q?Robert_=A3opatecki?= <rora_at_nospam_poczta.onet.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Thu, 29 Jan 2004 11:28:57 +0100


wynik=(unsigned long)7*10000;
wynik=7*(unsigned long)10000;
Czy moglibyscie mi wyjasnic dlaczego tak zapisywac ?
Czy moze doszliscie do tego droga prob i bledow ?

Robert


========
Path: news-archive.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: Marcin E. Hamerla <Xmehamerla_at_nospam_Xpro.Xonet.Xpl.remove_X>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Thu, 29 Jan 2004 11:33:27 +0100


Robert Łopatecki napisal(a):

wynik=(unsigned long)7*10000;
wynik=7*(unsigned long)10000;
Czy moglibyscie mi wyjasnic dlaczego tak zapisywac ?
Czy moze doszliscie do tego droga prob i bledow ?

Metoda prob i bledow nie. Raczej czachologicznie. Chodzi o to, ze
10000 jest to liczba typu int. 7 to char. Kompilator wykonujac
obliczenie zaklada, ze wynik bedzie typu int. Czyli tu jest zrodlo
bledu, poniewaz wynik powinien byc long. I na koncu kompilator
dokonuje konwersje int -> long.
Konwersja typow to jedna z wazniejszych spraw gdy piszesz na
mikrokontrolery.

--
Pozdrowienia, Marcin E. Hamerla

- What about your soul?
- I'm an engineer.

========
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: =?ISO-8859-2?Q?Robert_=A3opatecki?= <rora_at_nospam_poczta.onet.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Thu, 29 Jan 2004 11:41:57 +0100


Metoda prob i bledow nie. Raczej czachologicznie. Chodzi o to, ze
10000 jest to liczba typu int. 7 to char. Kompilator wykonujac
obliczenie zaklada, ze wynik bedzie typu int. Czyli tu jest zrodlo
bledu, poniewaz wynik powinien byc long. I na koncu kompilator
dokonuje konwersje int -> long.

Wielkie dzieki.

Konwersja typow to jedna z wazniejszych spraw gdy piszesz na
mikrokontrolery.

Cenna uwaga, ale chyba nie tylko w przypadku mikrokotrolerow.

Robert


========
Path: news-archive.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: Marcin E. Hamerla <Xmehamerla_at_nospam_Xpro.Xonet.Xpl.remove_X>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Thu, 29 Jan 2004 11:47:32 +0100


Robert Łopatecki napisal(a):

Konwersja typow to jedna z wazniejszych spraw gdy piszesz na
mikrokontrolery.

Cenna uwaga, ale chyba nie tylko w przypadku mikrokotrolerow.

Znacznie wazniejsze niz w przypadku duzych maszyn, bo tam niektore
bledy nie wyleza.

--
Pozdrowienia, Marcin E. Hamerla

- What about your soul?
- I'm an engineer.

========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.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: B <bz_at_nospam_onet.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Thu, 29 Jan 2004 15:04:41 +0100


Robert Łopatecki wrote:

Konwersja typow to jedna z wazniejszych spraw gdy piszesz na
mikrokontrolery.

Cenna uwaga, ale chyba nie tylko w przypadku mikrokotrolerow.

Robert

Zgadza sie. Szczegolnie w przypadku 32 bit RISC.
Dobrze manewrujac typami i rzutowaniem mozna wiele uzyskac.

B.



========
Path: news-archive.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: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_wp.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Fri, 30 Jan 2004 15:28:27 +0100



Marcin E. Hamerla wrote:

Konwersja typow to jedna z wazniejszych spraw gdy piszesz na
mikrokontrolery.

I dlatego bardzo mnie dziwi popularnosc tego jezyka
w tych zastosowaniach, a nie czegos, co zacznie
wrzeszczec gdy tylko programiscie wpadnie do glowy
cos glupiego. IMO Ada bylaby znacznie lepsza.

Pozdrawiam
Piotr Wyderski



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

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Stanisz <mstanisz_at_nospam_poczta.bzdury.onet.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: 30 Jan 2004 15:04:17 GMT


W artykule <bvdrfl$lhc$2_at_nospam_atlantis.news.tpi.pl> Piotr Wyderski napisal(a):
cos glupiego. IMO Ada bylaby znacznie lepsza.

Wolę Małgorzatę ;-)))

bp, nmsp

Marcin Stanisz
--

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

========
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: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Fri, 30 Jan 2004 17:28:53 +0100


On Fri, 30 Jan 2004 15:28:27 +0100, Piotr Wyderski wrote:
I dlatego bardzo mnie dziwi popularnosc tego jezyka
w tych zastosowaniach, a nie czegos, co zacznie
wrzeszczec gdy tylko programiscie wpadnie do glowy
cos glupiego. IMO Ada bylaby znacznie lepsza.

Od Ady odeszlismy 15 lat temu, mimo ze byla lepsza :-)

J.



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

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_wp.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Fri, 30 Jan 2004 15:42:29 +0100



Robert Łopatecki wrote:

Czy moglibyscie mi wyjasnic dlaczego tak zapisywac ?

"Behold, I tell you a Mystery". ;-) Jezyk C ma paskudna
umiejetnosc i sklonnosc dokonywania m.in. niejawnych
promocji calkowitych i zmiennoprzecinkowych oraz konwersji
calkowitych, zmiennoprzecinkowych i arytmetycznych,
a takze konwersji typu wskaznikow. W C++ jest jeszcze
"smieszniej"... Stad czasem bez wczytania sie w standad
wlasciwie nie wiadomo co oznacza dane wyrazenie. Ty
rowniez stales sie kolejna ofiara tego mechanizmu. Chodzi
o to, ze formalnie rzecz biorac liczby ze znakiem i bez znaku
tworza osobne klasy obiektow i nie powinny byc ze soba
mieszane bez jawnego zyczenia konwersji ze strony programisty.
Niestety C(++) ma na ten temat wlasne zdanie i bez Twojej
swiadomej woli radosnie konwertuje sobie te liczby, czego
efektem sa bardzo trudne do wykrycia bledy. W tym przypadku
kompilator obliczyl sobie 7*10000 jako int (mod 2^16)
i nastepnie zamienil wynik na unsigned long, bo kazales mu
pomnozyc inty. Napisz jawnie, ze chcesz mnozyc unsigned
longi: 7UL*10000UL i powinno dzialac. Nie przejmuj sie
niepowodzeniami, C i C++ to jezyki-koszmarki, ktore maja tylko
te zalete, ze bardzo dobrze tlumacza sie na kod maszynowy.
Jedyne co mozesz zrobic, to albo sie przyzwyczaic do takich
atrakcji, albo zaczac pisac w czyms porzadniejszym.

Pozdrawiam
Piotr Wyderski



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

Poprzedni Następny
Wiadomość
Spis treści
From: fred cassidy <patrz_at_nospam_stopka.kurcze>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Sat, 31 Jan 2004 13:58:50 +0100


Piotr Wyderski wrote:
[ciach]

Jedyne co mozesz zrobic, to albo sie przyzwyczaic do takich
atrakcji, albo zaczac pisac w czyms porzadniejszym.

Pozdrawiam

A w czym piszesz Piotrze ? I co ? (tak z ciekawosci pytam, bo ja jednak
w C/C++)
--
My tu gadu gadu,a entropia rosnie
http://fredcs.republika.pl fredc_at_nospam_unipress.waw.plONK (skasuj onk) irc:
ShOfJack #astropl
Karol Fietkiewicz



========
Path: news-archive.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: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_wp.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Sun, 1 Feb 2004 01:09:21 +0100



fred cassidy wrote:

A w czym piszesz Piotrze ? I co ?

Obecnie zajmuje sie automatyczna translacja; pisze generator
asemblerow. A w czym ogolnie pisze? -- to zalezy od konkretnego
problemu, spektrum jest szerokie: od asemblera do Prologu, z dwoma
bardzo silnymi pikami w okolicach C++ oraz Javy. :-)

bo ja jednak w C/C++

Coz, ja bym sie bardzo bal pisac w C++ na mikrokontrolery.
Zbyt duzo od nich zazwyczaj zalezy, a pisanie oprogramowania
o znaczeniu krytycznym dla ludzkiego zycia i zdrowia w C++ to
gra w rosyjska ruletke. No ale ja mam bardzo paranoiczne
podejscie do niezawodnosci oprogramowania... ;-)

Pozdrawiam
Piotr Wyderski



========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!newsfeed.gazeta.pl!news.gazeta.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: fred cassidy <patrz_at_nospam_stopka.kurcze>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Sun, 01 Feb 2004 09:54:43 +0100




fred cassidy wrote:
A w czym piszesz Piotrze ? I co ?

Piotr Wyderski wrote:
Coz, ja bym sie bardzo bal pisac w C++ na mikrokontrolery.

Nie, pisanie w C++ na mikrokontrolery :)) niee... nie mialem
mikrokontrolerow na mysli..
Na mysli mialem programowanie "zwyczajne" . Pozatym, nadużywanie
obiektów moim zdaniem jest częste (i nagminne niestety), ze szkodą dla
rozmiaru, szybkosci i niezawodności własnie.

Dziekuje :)

Pozdrawiam
--
My tu gadu gadu,a entropia rosnie
http://fredcs.republika.pl fredc_at_nospam_unipress.waw.plONK (skasuj onk) irc:
ShOfJack #astropl
Karol Fietkiewicz


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

Poprzedni Następny
Wiadomość
Spis treści
From: "peters" <peters_at_nospam_poczta.onet.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Thu, 29 Jan 2004 11:26:23 +0100


unsigned long wynik;
wynik=20000+50000; (po kompilacji wynik=0x011170 czyli poprawnie)

natomiast:

unsigned long wynik;
wynik=7*10000; (po kompilacji wynik=0x01170 czyli nie poprawnie)

sprawdz to:
unsigned long wynik;
wynik=7ul*10000ul;


--
pozdrawiam, peters
e-mail: peters_at_nospam_poczta.onet.pl gadu-gadu : 769203
http://www.elester-pkp.com.pl/pl/freeware.php (troche programow do
pobrania)



========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.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: "Mister" <wojpie_at_nospam_wywal_to.poczta.onet.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Thu, 29 Jan 2004 13:24:27 +0100


wynik=7*10000; (po kompilacji wynik=0x01170 czyli nie poprawnie)
Dlatego istnieje w C cos, co nazywamy rzutowaniem typów :-).

Ostrożny bym był z twierdzeniem, iż Keil robi błąd :-)

Pozdrawiam
Mister





========
Path: news-archive.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: "Piotr Wyderski" <piotr.wyderskiREMOVE_at_nospam_wp.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Fri, 30 Jan 2004 15:46:06 +0100



Mister wrote:

Ostrożny bym był z twierdzeniem, iż Keil robi błąd :-)

Bo robi, a scislej pod grozba utraty zgodnosci ze
standardem powiela. Zas prawdziwi winowajcy tego
stanu rzeczy nazywaja sie Kernighan, Ritchie oraz
Stroustrup.

Pozdrawiam
Piotr Wyderski



========
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: "swiniaczek" <swiniaczek_at_nospam_buziaczek.pl>
Subject: Re: KEIL+kompilator C == bledy ?
Date: Thu, 29 Jan 2004 21:04:17 +0100


Porsze pamietac! Jezeli ktos posiada pirackie kopie programów nie wolno ich
uzywac.
Nalezy sporzadzic liste wszystkich osób powiazanych i wraz z programami
bezwzglednie przekazac, jako material dowodowy policji:)
----------------------------------------------------------------------------
----------------------------------------------------------
Sprawdzalem to i jest dobrze. Sciagnij demo najnowszej wersji i sprawdz.
Która wersje masz?
swiniaczek


Tam tez znalazlem blad.


Uzytkownik "Robert Łopatecki" <rora_at_nospam_poczta.onet.pl> napisal w wiadomosci
news:bvamp0$get$1_at_nospam_news.onet.pl...
Witam Wszystkich,
podczas pisania programu w C
na '51 w Keil-u znalazlem taka mala
dziwnostke:

unsigned long wynik;
wynik=20000+50000; (po kompilacji wynik=0x011170 czyli poprawnie)

natomiast:

unsigned long wynik;
wynik=7*10000; (po kompilacji wynik=0x01170 czyli nie poprawnie)

I mam do Was takie pytanko, czy moglby to ktos
sprawdzic ? Moze to akurat ja mam cos nie tak
ustawione ?
Z gory Dzieki.

Pozdrowka
Robert




========
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