Zagadkowe błędy kompilacji z unsigned long w Keil C dla mikrokontrolera '51
KEIL+kompilator C == bledy ?
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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