Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Aritmetika u pokretnom zarezu-koliko je neophodna

[es] :: Elektronika :: Mikrokontroleri :: Aritmetika u pokretnom zarezu-koliko je neophodna

Strane: 1 2

[ Pregleda: 8610 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.co.yu.



+7 Profil

icon Aritmetika u pokretnom zarezu-koliko je neophodna26.03.2007. u 13:03 - pre 208 meseci
Potreban mi je statisticki podatak o tome koliko se koristi aritmetika u pokretnom zarezu prilikom pisanja programa za klasicne kontrolerske funkcije mikrokontrolera. Imam utisak da je programeri gotovo ne koriste, ja sam je jednom koristio (bilo mi je lakse, a ne zato sto je trebalo) i brzo sam potrosio flash. Kako pisem PASCAL kompajler za mikrokontroler, zelim da tacno ustanovim kolika je potreba za aritmetikom u pokretnom zarezu. Zelim da je izbacim iz izraza, ali da eventualno napravim samo neke funkcije koje ce raditi sa tipovima podataka real.

Unapred hvala svakom koji iznese svoje iskustvo.

Pozdrav.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna28.03.2007. u 12:50 - pre 207 meseci
Za ¨klasicne¨, kako ti kazes, kontrolerske funkcije, gde se nesto upali ili ugasi kad se nesto desi ili nedesi, i tome slicne aplikacije, meni jos nijednom nije trebala aritmetika u pokretnom zarezu.
Medjutim, da li tebi treba ta mogucnost u tvom kompajleru, je sasvim drugo pitanje po mom misljenju. U tu svrhu ti bi trebao da definises sam sebi za sta ce prevashodno da se koristi taj tvoj kompajler.
Npr. ako ce to biti neki ¨hobisticki¨ kompajler kao zamjena nekim skupljim industrijskim i drugim kompajlerima ili nesto u tom smislu, onda mislim da ti to netreba. Ako bi se on koristio na takav nacin, to podrazumjeva ¨kucne¨ i garazne projekte, manjeg kvantitativnog obima, gdje izbor mikrokontrolera nije bitan, kao kad se radi npr. o vecim serijama proizvedenih uredjaja. Kad ja razmisljam o odabiru mikrokontrolera za nesto sto pravim u par primjeraka onda se uopste ne dvoumim oko toga da li cu da uzmem neki ¨jedva¨ dostatan mikrokontroler od 5 evra, ili cu za 15 evra da uzmem neki 50 puta jaci koji vec ima u sebi ugradjenu aritmetiku u pokretnom zarezu. Uzmem taj od 15 evra ili cak DSP i to mi ustedi 10 dana programiranja. To znaci da ja dobijam jedan dan za 1 evro, a te slobodne dane mogu npr. da istovaram dzakove za 2 evra po satu i opet sam na dobitku.
Sa druge strane, tako nesto bi bilo dobro kad bi se tim kompajlerom radile velike serije, pa je bitno da kupis npr. 10 000 ili vise cipova od 5 evra, a ne od 15. Ali isto tako onda treba da imas na umu da takve projekte ne rade klinci kojima je tesko da nauce asembler ili C, pa eto posto znaju nesto paskala iz srednje skole, onda ima je to bas zgodno sto mogu na paskalu. Medjutim, niko nece projekat od 10 000 primjeraka povjeriti na izradu klincima koji rade u paskalu.
Uopste, malo je nezahvalno baviti se mikrokontrolerima u paskalu. Nisam jos sreo nekog ozbiljnijeg, odnosno bilo kakvog embedded lika koji razmislja o paskalu, ili koji je rekao da mu nedostaje paskal u njegovom poslu.
Ovo su moja iskustva, a ne zvanicne statisticke cinjenice. Dakle, krajnje nepouzdano.
Mozda neko ima drugacija iskustva.
Pozdrav.
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
80.80.60.*



+7 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna28.03.2007. u 21:41 - pre 207 meseci
Koristi se vrlo vrlo retko, ali ako pises kompajler za malo napredniji mikrokontroler koji moze osim da upali neki relej i da nesto izracuna postoji verovatnoca da ce se naci neko i da ga upotrebi.

Sve zavisi i od tvojih ambicija koliko profi taj kompajler mora biti, odnosno okrenut vise hobistima ili profesionalcima.

Sto se tice paskala barem kod nas, vecina programera koji su zavrsili neki faks koji je vezan sa informatikom ili matematikom su imali u okviru studiranja pascal kao programski jezik, tako da je verovatnoca da bas ti "profi" programeri zatrebaju i pokretni zarez, jer ce mozda pisati zahtjevniji softverza mc.

Da pises kompajler za seriju 16f piceva ja bi ti preporucio da na pokretni zarez zaboravis:)




 
Odgovor na temu

obranko
severna amerika

Član broj: 36599
Poruke: 152
*.cpe.net.cable.rogers.com.



+1 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna29.03.2007. u 03:37 - pre 207 meseci
Newbridge-ova serija Main Steet 36xx je napisana u Pascalu i asembleru. Ta serija proizvoda prodata je u tokom vise godina za bar 500M USD(Newbridge je kupljen od strane Alcatela pre jedno 7-8 godina).
Ako pises kompajler za 8 bitni procesor, ne gubi vreme sa aritmetikom u pokretnom zarezu, ako pises za 32 bitni procesor, to je obavezno. Srednji slucaj za 16 bitni procesor, odgovor zavisi od ciljne grupe kojij nameravas da prodas/das svoj kompajler.
Pozdrav
 
Odgovor na temu

sdurut
Mašinski šloser

Član broj: 76787
Poruke: 673



+66 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna29.03.2007. u 22:26 - pre 207 meseci
Sto se tiče 8bitnih mikrokontrolera prevashodno 8051 derivata na kojima radim retko mi je trebala aritmetika u pokretnom zarezu. Sa malo egzibicija i programerskog umeća određeni algoritmi se mogu realizovati i sa celim brojevima umesto u pokretnom zarezu za gubitkom preciznosti na odeđenom broju decimala. Trenutno koristim i Hitachi 16bitnu seriju H8/300 i Hitachi SH1 32bitni. Sve aplikacije pišem u C/C++ koji ima svoje floating point biblioteke. Tip podataka fload i double jako retko koristim u mojim projektima. Poznajem paskal i neko vreme sa ga uporedo koristio na PC platformi. Smatram da je pascal akademski programski jezik ali ne vidim neke njegove posebne prednosti u odnosu na druge programske jezike. Voleo bih da čujem koje su pogodnosti pisanja aplikacije za mikrokontrolere u pascalu.
 
Odgovor na temu

zofr

Član broj: 126534
Poruke: 119
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna30.03.2007. u 23:37 - pre 207 meseci
Nekada sam koristio 8031 (samo u jednom projektu), a onda duze vreme HC11, pa nesto krace vreme PIC,
a sada MC9S08 i mislim da sam pogodio pravu stvar. Potrebu za pokretnim zarezom nisam imao, sve sam
resavao u fiksnom zarezu i vodio sam racuna da ne izgubim ni jedan bit rezultata. Ali sam bio razvio
zbirku procedura za rad u pokretnom zarezu za HC11. Za ovaj mikrokontroler to nije bilo skupo jer
pored mnozenja (8x8 bita) ima i deljenje 16 sa 16 bitam i to celobrojno i posebno frakciono. To je
bilo idealno za pokretni zarez sa 16-to bitnom mantisom i dobra zamena za 16-to bitnu celobrojnu
aritmetiku. Ali za duze mantise to nije bio slucaj. Mislim da ako mikrokontroler ima deljenje 32 sa 32
bita bila bi steta da ne postoji aritmetika u pokretnom zarezu jer ne bi bila skupa.

Da zakljucim, pokretni zarez nije neophodnost, ali moze da ustedi vreme i trud.

Za sdurut,
oduvek koristim PASCAL, ali koristim i C kada moram (samo ako musterija to trazi). Radije koristim
asembler nego C. Ko poznaje istorijat nastanka C-a zna da je on nus proizvod u razvoju UNIX-a. Kada
kazem PASCAL mislim na Borlandovu verziju u koju su ubacene neke stvari iz Module2 (koji je bolji
od PASCAL-a i C-a zajedno). Vidim, svi koriste C, probam i ja, pa napravim neke testove uporedjenja:
u C nisam dobio ni kraci ni brzi kod, ali sam vise vremena potrosio zbog uzasne sintakse i mnostva
izuzetaka u pravilima. I opet se vratim na PASCAL.

PASCAL je napravljen kao prg. jezik visokog nivoa i nije usmeren ni na jednu vrstu aplikacija. PASCAL
ne zavisi od nekakvih linkera (koji su danas zaboravljeni jer vise nisu potrebni), ali C se zbog
kompatibilnosti i dalje oslanja na linkere razvijene 50-tih godina proslog veka. Upravo zbog toga
postoji zbrka u prijavljivanju gresaka. Koliko vam se puta desilo da C kompajler (uz svesrdnu pomoc
linkera) prijavi gresku koja to nije i naravno na neodredjenom mestu.

Jos 1977 god. je Barron postavio 3 osobine koje mora da zadovolji dobar programski jezik. To su:

1. Ekonomija pojmova: postizanje maksimalne snage sa sto manje pojmova. Tu spadaju Algol68, PASCAL i
Occam, a ne spada C, dok je kontra primer PL/1.

2. Uniformnost: nepostojanje posebnih slucajeva i izuzetaka oslobadja programera da ih pamti i olaksva
mu analizu programa. Tu spadaju opet predhodna 3 jezika bez C-a, a kontra primer je COBOL.

3. Ortogonalnost: postojeci pojmovi su nezavisni i za njih vaze ista pravila u svim situacijama. Kada
ovo vazi, onda se od jednostavnih pojmova mogu graditi slozeniji pojmovi koji prate nit logickog
razmisljanja programera. I ovo zadovoljavaju pomenuta tri gezika, ali ne i C, dok su u ovom smislu
najgori FORTRAN, COBOL i BASIC.

Da su ova pravila na svom mestu mnogo puta sam se uverio. Na primer:

a = a+b; i a += b

postoje dva pojma za istu stvar, a ima takvih slucajeva mnogo.

PASCAL ima jasnu strukturu. Program ima zaglavlje sa imenom programa, zatim sledi blok i na kraju
znak tacka. Procedura i funkcija imaju zaglavlje iza kojeg sledi takodje blok. Iz ovoga proizilazi
da se mogu procedure i funkcije gnezditi, sto nije slucaj sa C-om. Ovo je primer osobine ortogonalnosti.

Eksplicitna konverzija tipa:
Code:

    PASCAL:     imeTipa(varijabla)
         C:     (imeTipa)varijabla



   ili  PASCAL   a := b
             C   a = b

ako su a i b nizovi istog tipa, PASCAL ce stvarno vrednost niza b dodeliti nizu a, a C ce adresu niza b
dodeliti adresi niza a, odnosno promenice adresu niza a koju joj je dodelio kompajler dok je prevodio
deklaracije (katastrofa). Ovo su primeri ispunjenja osobine uniformnosi (PASCAL) i neispunjenja (C).

Ovakvih primera ima sijaset, a ja sam naveo one koji su mi trenutno pali na pamet.

Zasto je C nadmocan u primeni: ne zato sto je najbolji, vec zato sto sve tehnoloske inovacije dolaze
iz USA. PASCAL je nastao u Svajcarskoj, i ni na koji nacin nije vezan za profit. Razgovarao sam sa
menedzerima u inostranstvu zasto traze da njihovi programeri pisu u C-u. Najcesci odgovor je: svi tako
rade i zaradjuju pare. Medjutim nisu znali da kazu zasto skoro svi imaju grupu programera za dibagiranje.
Oni misle da je to normalno, a ja kazem da program pisan u C-u nije pouzdan pa zato i imaju te grupe.

Na kraju krajeva engleski je svetski jezik ne zato sto je najbolji vec zato sto je siren koloniziracijom
i zato sto je on jezik USA. Cak sta vise, engleski jezik je jedan od najmladjih jezika (danasnji
engleski se konacno formirao u Sekspirovo vreme), vrlo je neprecizan i njime dobro vladju samo skolivani
ljudi (iako im je on maternji jezik).

Mnogo sam se raspisao, dosta je.

Pozdrav.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna01.04.2007. u 16:54 - pre 207 meseci
za zofr

Mi ovdje raspravljamo o programiranju mikrokontrolera, a u tom slucaju vecina ovoga sto si ti napisao nema nikakvog znacaja u toj dimenziji.
Sto se tice Baronovih pravila, niko ne programira mikrokontrolere na Algolu68, niti na Occamu, vrijeme je pokazalo koliko su ti jezici aktuelni danas; izuzeci koji postoje kod C-a uglavnom postoje da bi se neke specificne mogucnosti jezika/masine ipak ostavile na raspolaganju onome ko hoce/zna da ih koristi, a ne da bi se iritirali oni koji bi da ovladaju jezikom pomocu knjige "Naucite C za 24 sata".
Ti si takodje vjerovatno i prvi programer na svijetu koji je postigao istu brzinu sa C-om i Paskalom. Neznam kako ti je to uspijelo, ali svaka cast!
Nikad nisam cuo da je C nusproizvod u nastanku Unix-a, volio bih da navedes izvor te informacije. Unix je pisan u C-u, valjda je onda prvo trebalo napisati C.
Postoji nacin kako se u C-u dodijeljuje jedan niz drugom na nacin kako bi ti zelio, a postoji i onaj koji ti kritikujes. DOBRO je da postoje OBA nacina.

C je nadmocan u primeni jer je najbrzi poslije asemblera, i najekonomicniji u zahtjevima za sistemskim resursima, a to je ono sto je bitno kod mikrokontrolera, o kojima mi ovdje i raspravljamo.

Kad zelis da saznas zasto se koristi C, onda nemoj pitati menadzere nego programere i inzinjere.
Sticem nekako utisak da ti sve ove informacije dobijas iz neadekvatnih izvora.

Sto se tice pouzdanosti programa, ta osobina uglavnom zavisi od pouzdanosti programera da razmislja kako treba, a ne od samog jezika. Na kraju krajeva, bitan je koncept, a jezik je samo sredstvo kojim se taj koncept predstavlja u datoj situaciji.
Nije bitno da li cu ja svoju misao izraziti na njemackom, engleskom ili srpskom, vec je bitno sta mislim, a prevodilac ce se lako naci.

 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.co.yu.



+7 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna02.04.2007. u 11:46 - pre 207 meseci
Kako sam ja otvorio ovu temu nije fer da Odin D i zofr vode polemiku bez mene, barem mi
se cini da ce biti polemike.

Saradjivao sam 3 godine sa jednom firmom i Nemackoj, i za to vreme sam u njoj proveo par meseci u vise navrata. Projekte koje sam za njih radio programiraosam u asembleru, i oni nisu imali nista protiv. Dibagirao sam ili doradjivao postojece softvere za stare projekte u C-u. Naravno da sam i ja razgovarao sa njihovim menedzerima i programerima. Za menedzere zofr je u pravu, a programeri kazu da se to trazi od njih i da im takve razvojne alate kupuje firma, oni na to ne uticu. Kada sam preuzeo zadatak da dibagiram neki softver pisan u C-u, zacudili su se zasto trazim Data Sheet za mikrokontroler (neki 32-o bitni Filipsov), kao sta ce mi. Ono sto sam im rekao kao da nisu razumeli, a to je bilo: da je za vecu efikasnost koda koji pisem neophodno da znam strukturu, pre svega CPU-a
mikrokontrolera. Koliko je nerazumevanje ovog pitanja bilo neka posluzi i cinjenica da njihov glavni programer nije znao da u razvojnom alatu otvori prozor sa disasembliranim listingom, dakle nije mu nista znacio i nije ga ni koristio. Njihov direktor kaze da moze da nadje na stotine programera u C-u ali ne i u asembleru. Dakle, ima mnogo onih koji nauce C, ali ne znaju kako funkcionise mikrokontroler pa ne mogu ni da ga programiraju na asembleru. Zato su programi za PC sve duzi i duzi i zahtevaju sve brzi hardver jer se programira primenom sirove sile.

Sto se tice Baronovih pravila ona vaze i danas bez obzira sto su u primerima navedeni jezici koji su izumrli. Pricamo o C-u i PASCAL-u, a cinjenica je da ih PASCAL zadovoljava a C ne. Pravi programer zna znacaj ovih pravila, i nije slucaj zasto se studentima programiranje predaje na primeru PASCAL-a.

Inace, kada je u Bell-ovim laboratorijama poceo razvoj UNIX-a C nije postojao. Ekipa koja je dobila ovaj zadatak odlucila je da olaksa sebi pisanje UNIX-a, pa su napravili neki mali jezik koji nije imao cak ni tipove. Nazvali su ga, tek onako jezik A. U toku pisanja UNIX-a, lepo im je posluzio, pa su ga doradili i nazvali jezik B pa iza toga i BCPL. Po zavrsetku UNIX-a Denis Rici je iz B-a i BCPL-a osmislio C jezik 1972 god.

Skrecem pazji Odin D.-u da su i PASCAL i C proceduralni jezici, da imaju iste programske strukture i iskaze i da efikasnost ovako slicnih jezika zavisi samo od kvaliteta kompajlera. Zato nije cudo ono sto tvrdi zofr. Primere koje je dao su dobra ilustracija kako se ova dva jezika odnose prema Baronovim pravilima.

Kada je Virt pravio PASCAL, on nije imao u vidu ni jedan tadasnji racunar, on je samo zeleo da napravi programski jezik visokog nivoa koji zadovoljava Baronova pravila. Suprotno tome C je pravljen prema mogucnostima tadasnjih racunara. A kakvi su oni tada bili? Imali su malu RAM memoriju, a spoljna memorija je bila sa magnetnim trakama. Tada je program morao da se prevodi u delovima i da se oni posle linkerom povezuju. C od svog nastajanja koristi linkere razvijene 50-tih godina proslog veka, i zbog kompatibilnosti sve je to ostalo do danasnjih dana.

Danas racunari imaju veliku RAM memoriju i mogu odjednom da prevedu ceo kod (narocito za mikrokontrolere) pa nema potrebe za linkerima. Osim toga, tada mpajleri nisu bili kvalitetni kao danas (zbog pomenutih ogranicenja tadasnjih racunara) pa otud naredbe u C-u tipa a += b ili a++ da bi kompajler mogao da generise efikasniji kod u odnosu na a = a+b ili a = a+1. Danasnji kompajleri imaju veliki broj opcija za optimizaciju koda i prilikom prevoda uzimaju u obzir vise iskaza.

Ko misli da C kompajler po pravilu generise kraci i brzi kod od PASCAL-a, mnogo gresi, to sve zavisi od kvaliteta kompajlera i neceg vise. Ko ne veruje neka uzme referentne definicije C-a i PASCAL-a, neka ih uporedi i videce da je cak teze napraviti dobar C kompajler nego dobar PASCAL kompajler (jer C ne ispunjava pravila Barona). Uostalom to se lako vidi kada se uporedi vreme pravodjenja istih programa, na istoj masini, pisanih u C-u i PASCAL-u. Prevodjenje PASCAL programa je osetno brze. Kada govorim o PASCAL-u i ja kao i zofr podrazumevam Borlandovo prosirenje PASCAL-a nekim resenjima iz MODULA2 programskog jezika.

Voleo bih da Odin D. navede primere iz C-a koji ce pokazati njegovu nadmoc nad PASCAL-om.

P.S.

Postoji knjizica (ne znam u cijem izdanju) ali sadrzi zbirku najvacih zabluda znacajnih ljudi. Zapamtio sam da je direktor razvoja IBM-a, kada mu je prikazan prvi mikroprocesor, rekao da to nikada nece naci primenu u racunarima. Ili, ministar vojske jedne zemlje (ne secam se koje) je videvsi prve avione rekao da oni nece imati nikakav znacaj za vojsku. Ili, konstruktori Intela, prvog 16-to bitnog mikrokontrolera su mislili da je 64KB koda sasvim dovoljno uz postojanje 4 segmentna registra (jedan za kod, drugi za podatke, treci za stek a cetvrti da se u njemu baskari programer). Brzo je postalo jasno da je to zabluda, i znate kakvi su krpezi
nastali od tog mikroprocesoira, uvodjenje zasticenog moda i deskriptora i kojekakvih drugih cuda. Moja generacija je svedok da se 70-tih na 80-te godine pisalo u strucnoj literaturi da ce u buducnosti softver eksplozivno da se razvija, a da ce hardver tesko moci da ga prati. Danas je medjutim slika obrnuta: hardver se nesluceno mnogo razvio, a softver je sve gori i gori i samo zloupotrebljava hardver. Setite se Komodora i Spektruma ili racunara Partner (valjda se tako zvao ovaj Iskrin racunar) koji je sa Z80 i CPM operativnim sistemom vodio poslovanje banaka kod nas. Kada bi se sa nekadasnjom efikasnoscu koristio danasnji hardver racunara ne mogu ni da zamislim kakavi bi tada programi bili. Prosto je steta muciti danasnji hardver C-om koji koristi linkere od pre 50 god. i koji je toliko neljubazan prema programeru do nepodnosljivosti. Prosto se uzasavam da ce se u trecem milenijumu programirati i dalje u C-u.

Pozdrav.
 
Odgovor na temu

indicator1
BGD

Član broj: 4248
Poruke: 533
82.117.192.*



+1 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna02.04.2007. u 12:15 - pre 207 meseci
Rasprava o tome koji je kompajler bolji ne vodi nicemu jer to zavisi od slucaja do slucaja. Pogotovu poredjenje izmedju racunara i mikrokontrolera je bespredmetno, zna se sta je C++ i .NET programer a sta znaci C programer na kontroleru: koji C, koji kontroler?. Pa kod iz jednog C-a ne radi u drugom bez solidnih prepravki, iako se svi hvale da prati ANSI standard, znaci dva C-a je tesko uporediti a kamoli nesto drugo.A sa druge strane evo vam primer nase firme Mikroelektronika: oni prave nekoliko kompajlera, C, Pascal, Basic, Fortran koji su u sustini ista stvar, tj platforma je ista a i generisani kod je manje vise slican iako je sintaksa sasvim razlicita.
A ko se bavi programiranjem kontrolera bez data sheet-a taj nema pojma sta radi. Meni je radni sto pretrpan samo data sheet-ovima imam sigurno par hiljada strana stampe.
I da se vratim na osnovno pitanje: artmetika na kontroleru stvarno je retko potrebna, ali kad jeste... Radio sam neku real-time estimaciju procesa, e tu bez floating pointa nema nista, ne pomazu nikakvi trikovi jer su greske u racunu kumulativnog tipa. Uglavnom iz mog licnog iskustva, svega 2-3% projekata zahteva FP.
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.co.yu.



+7 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna02.04.2007. u 15:47 - pre 207 meseci
Hvala indicator1 na konkretnom odgovoru. I ja mislim da se procenat potrebe za pokretnim zarezom krece u okviru vrednosti koje si naveo. Pozdravi Nesu.

Inace, rasprava nije u tome koji je kompajler bolji, vec smo raspravljali o programskim jezicima, doduse akademski, ali to ima i prakticnu vrednost. Dokaz je zastoj razvoja softvera u odnosu na razvoj hardvera. Ne kazem da bi tu PASCAL napravio neki spektakularan pomak, ali za ozbiljne masine odavno je potreban neki primereni programski jezik kao i razvojni sistem.

Sto se tice mikrokontrolera C ce jos uvek dominirati, ali ja cu se potruditi da radim samo u asembleru ili PASCALU (nece dusa).

Sto se tice nagomilavanja greske, taj problem se ne resava automatski koriscenjem pokretnog zareza. Oduzimanje ili sabiranje brojeva u pokretnom zarezu se vrsi tako sto se eksponenti oba broja svedu na istu vrednost, a ta je vrednost jednaka vecem eksponentu. Pri tome se mantisa broja sa manjom vrednoscu pomera udesno. Tada, zavisno od velicine mantise moze doci do gubitaka velikog broja bitova.

Na primer kod NF filtriranja signala X i dobijanja signala Y ima se:

Y := Y+(X-Y)/2^N //2^N odredjuje vremensku konstantu, a deljenje se svodi na siftanje

Ako koristis pokretni zarez 2^N moze biti bilo koja konstanta, ali ako ostane 2^N deljenje se svodi na smanjenje eksponenta vrednosti X-Y. E sad ako je ova vrednost mnogo mala nece se promeniti vrednost Y. Tada ili treba produziti mantisu, ili umetnuti dodatnu varijablu koja ce akumulirati gresku, i kada ona dostigne neku vrednost onda se vrsi dodavanje na Y. Ista tehnika se moze primeniti i u fiksnom zarezu.

Pozdrav.
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
80.80.60.*



+7 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna02.04.2007. u 21:19 - pre 207 meseci
Koliko ima iole ozbiljnijih pascal kompajlera za mikrokontrolere?

Ili drugacije formulisano koliko programera koristi paskal u pisanju programa a koliko C programera za pisanje programa za mikrokontrolere?

Koliko je meni poznato paskal se uci kao "teorijski" programski jezik i zbog toga vise programera barata paskalom nego C-om , i zasto se onda vise koristi C od paskala ako je isti superiorniji i bolji u svakom pogledu.

Vecina proizvodjaca mikrokontrolera cak naglasava da su njihovi mc C komatibilni (c optimizovani itd.) , da li je moguce da ti ljudi koji projektuju mc-e toliko neupuceni ili neobavesteni o snazi paskala a da su isti ucili na univerziteima , i ne prave mc-e kao paskal kompatibilne.



 
Odgovor na temu

zofr

Član broj: 126534
Poruke: 119
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna02.04.2007. u 23:19 - pre 207 meseci
Eh, grabik
kako razgovarati sa tobom?

Ja samo kazem da je PASCAL bolji programski jezik od C-a, to je dokaziva cinjenica i svima bi trebalo da
bude jasno, ako su skolovani programeri (neko rece: sacuvaj me boza od talentovanih amatera).

Kad se radi o programiranju mikrokontrolera odnos koriscenja C i PASCAL kompajlera je mozda (lupam)
1000000 : 1 u korist C-a. To nije argument da je C bolji, kao sto i rasirenost Engleskog jezika ne znaci
da je on najsavrseniji jezik. Jednostavno, C se rasirio zajedno sa mikrokontrolerskim tehnologijama koje
su dosle iz USA.

Kada proizvodjac kaze za svoj mikrokontroler da ima set instrukcija C optimizovan, onda je odvalio veliku
glupost na koju ce da se naloze paceri. Koji je taj genije koji ce na osnovu seta instrukcija da kaze
ovaj set je optimizovan za C a ovaj za PASCAL. To jednostavno nije moguce. Jedini pravilan iskaz
proizvodjaca mikrokontrolera moze biti: da je set instrukcija optimizovan za kompajlere visih programskih
jezika.

Predpostavljam da znas sta to znaci C optimizovan set instrukcija. Nabrojacu samo neke:

- instrukcije za pristup varijablama na steku;
- instrukcije za zavrsavanje brojackih petlji (dekrementiranje i skok ako je razlicito o nule);
- indeksno indirektno adresiranje;
- instrukcije koje olaksavaju kopiranje i t. d.

Ovo malo sto sam naveo nije specijalno za C, vec za svaki visi programski jezik.

Uzgred, ovakve instrukcije u najvecem broju ima familija MC908, dok ih PIC i 8051 bazirani
mikrokontroleri imaju manje, ali to ne smeta njihovoj popularnosti.

Dakle masovnost ne znaci automatski i kvalitet.

Pozdrav.
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
80.80.60.*



+7 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna03.04.2007. u 06:39 - pre 207 meseci
Slazem se sa tobom u vezi jezika , ali dali jezik prati i kvalitean prevodilac koji ce da taj jezik prevede u masinske instrukcije, moje misljenje je da za sada tu trku vodi C.
Ali sto opet ne znaci da neki dobro napisan kompajler u paskalu ne moze biti bolji od dobrog djela C kompajlera.

Sto se tice programera amatera , da li su svi poznati knjizevnici zavrsili fakultet knjizevnosti (ili kako se vec zove
).
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.co.yu.



+7 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna03.04.2007. u 10:43 - pre 207 meseci
Ljudi,
nista mi ne pomazete, a ocekivao sam da dodjem do procene treba li da ugradim u izraze pokretni zarez za PASCAL za 8-o bitne mikrokontrolere. Raspravljate o nekim dobro poznatim stvarima i na kraju se slozite. Posto sam do sada za neke mikrokontrolere napisao neke kompajlere imam iskustva u tome. Tacno je da se niko nije potrudio da napravi dobar PASCAL kompajler za neki 8-o bitni mikrokontroler (ili mozda ja ne znam) iako je (cenim od oka) pisanje PASCAL kompajlera dvostruko lakse nego pisanje C kompajlera. Iz dosadasnje diskusije vidi se zasto je to tako.

Zasto zelim da pokretni zarez izbacim iz izraza, ali cu imati funkcije koje rade sa pokretnim zarezom. Mozda je glupo da to radim ali evo razloga. Svaki izraz pre prevodjenja pretvorim u binarno stablo, gde je u svakom cvoru operator. Prevodnjenje se pocinje od najdubljeg cvora sto obezbedjuje da se zahteva najmanji broj medjurezultata, koji trteba da se cuvaju na steku. Dakle stedim stek. Kada izdvojim jedan cvor on ima operator i dva operanda. E sada zamislite koliko kombinacija ima kada ta dva operanda po tipu mogu da budu: byte, shortint, integer, word, longint, longword mislim 15, i ako dodam i pokretni zarez to ce biti 30. Osim toga svaka vrednost moze biti konstanta, staticka varijabla, dinamicka varijabla i pointerom ukazana varijabla. Ovo broj kombinacija drasticno uvecava. Naravno, mogu da objedinim mnoge od ovih kombinacija, ali necu dobiti optimalan prevod. Ako idem sirovom silom i obradjujem svaku kombinaciju ponaosob onda cu imati puno dosadnog posla ali ce prevod biti optimalan. Eto to je moja dilema, a vi mi, sem nekolicine, malo pomazete.

Pozdrav.
 
Odgovor na temu

grabik

Član broj: 32507
Poruke: 311
80.80.60.*



+7 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna03.04.2007. u 18:57 - pre 207 meseci
Nije od neke pomoci ali moze da nasmeje malo, evo 10 razloga zasto je paskal bolji od c-a skinuto sa neta.

Top 10 reasons why Pascal is better than C

1. Pascal, noble language as it is, was named after a famous French mathematician and philosopher, Blaise Pascal. C was named after a Sesame Street character.

2. Pascal's inventor, Nicholas Wirth, and parameter passing conventions coalesce to form a nifty pun: You can pronounce his name by reference: Wirth or by value: Worth. C was invented at Bell Labs, where they wouldn't know a joke from a transistor.

3. There is only one Pascal, as defined by Wirth, while C has (shall we say?) several fathers: Kernighan & Ritchie, Harbison & Steele, Barnum & Bailey, and Laurel & Hardy.

4. In C, the following variable names are all different: thesame, TheSame, theSame, and THESAME. Nuff said.

5. In Pascal, when you fool with a pointer or handle, you know you're fooling around with a pointer or handle. In C, you could be fooling around with anything. C is the ultimate language for computational promiscuity.

6. In Pascal, we *know* how big an integer is.

7. C is used by liberal, Democratic, Mike Dukakis types of programmers. Pascal is a favorite of the GOP. Hey, we know what the big language at Berkeley is, don't we?

8. C is the only language in the civilized world that still refuses to recognize the $ sign for a hexadecimal constant and continues to promote that base pretender to the throne: 0x00.

9. Pascal has well-defined rules for Scope, while C appears to be using Listerine. This accounts for the medicine breath of many C programmers.

10. In C, you can do this:

for(;P("\n").R-;P("|"))for(e=3DC;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);

In Pascal, you CAN'T do this :

for(;P("\n").R-;P("|"))for(e=3DC;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna03.04.2007. u 20:32 - pre 207 meseci
Ljudi moji, sve to sto ste vi rekli o C-u i Paskalu stoji, ali stoji samo za sebe, bez mnogo veze sa realnim svijetom, i kao takvo, nema mnogo prakticnog znacaja.
To vam je isto kao kad bi tvrdili da su Iranci u pravu, a Amerikanci u krivu, ili da u Iraku nije bilo hemijskog oruzja te da ih nije trebalo bombardovati, ili kako neki drugi imaju istorijsko pravo na neku teritoriju i sve tome slicno. Stanje je takvo kakvo je, dajte da vidimo sta se moze sa tim stanjem uciniti, a mi mozemo pricati i o onome sto se nikad nece desiti, ali nevidim cemu gubiti vreme na to.

Ono na sta vas ja pozivam, to je da se okanemo teorijskih rasprava i kafanskih anegdota o C-u i Paskalu, nego da se drzimo konkretnih cinjenica kako stvarno stoje stvari danas sa mikrokontrolerima (a ne nekih mogucih istorijskih tokova, npr. sta bi bilo da je Kernigena i Richija pogodio meteor, ili da su zivjeli 20 godina poslije Wirtha i ili da englezi nisu kolonizovali sve, nego norvezani, pa bi danas pricali mnogo bolji norveski jezik, i sve tako tako i tome slicno...).

C je nastao na gore opisani nacin, kako je korak naveo, ali nije kao nusproizvod, nego s namjerom da se napravi novi jezik. C je nastao razvojem iz nekih drugih jezika, a ne kao nus proizvod, kao evo napravili mi ovdje nesto, ali sta je ono tamo u cosku pored solje za kafu? Pa to je novi programski jezik, otkud to tu odjednom? Bas cudno, ajde da vidimo da li radi! I C++ je nastao iz C-a, pa mislim da bi bilo neprimjereno smatrati ga nusproizvodom.

Zatim, potpuno je iluzorno raspravljati o C-u za PC i o C-u za mikrokontrolere. Filozofija programiranja na te dvije platforme se razlikuju vise nego sto se razlikuje npr. Tetris i program koji upravlja liftom. U mikrokontrolerima programer mora da ima u vidu kako su mu zice zalemljene na ploci, ali to izgleda neki ne mogu da shvate.
Meni se 98% svih varijabli nalazi u svijetu bitova, i za svaki bit znam po kojem ce pinu mikrokontrolera da izleti ili uleti, koliki mu je tajming ili strujni kapacitet, koliko ce ms trajati, a onda mi neko prica o nekim apstraktnim tipovima i slicnim ¨prednostima¨ nekog jezika. I kao sto rece gore ¨indicator¨, ja ni sam ne znam koliko sam ketridza promjenio za moj laserski stampac i to sve na stampanje data sheetova, da ih prodam u stari papir, mogao bih auto kupiti. Programiranje mikrokontrolera nema veze sa programiranjem PC-a. Kod mikrokontrolera je C ionako ¨okrnjen¨ do te mjere da bi se tesko mogao i nazvati C-om, u poredjenju sa C-om za PC.

E sad, ja necu da ulazim u to da li je bolji C ili Paskal, ali stanje danas je takvo da kad se spomene mikrokontroler, onda se meni zbog uslovljenih refleksa (kako je to pokazao Pavlov u svom eksperimentu sa psom i zvonom) pred ocima pojavi asembler i C, a vjerujem da nisam jedini u svijetu.
Zatim, kad sledeci put odete na sajt nekog proizvodjaca mikrokontrolera, pogledajte koliko njih kao standardnu podrsku isporucuje Paskal kompajlere, a zatim pogledajte i koliko njih ne isporucuje C kompajlere. I imajte na umu da taj broj nije bas impresivan ne zato jer sam ja to ovdje tako napisao, nego jer je zaista tako.

E sad, vreme je da se vratimo na temu...
Sto se tice FP podrske....
Ne mogu ti dati nikakav konkretan odgovor da li da to realizujes ili ne, kao sto sam ranije vec gore napisao. Sve zavisi od toga sta ti mislis time da postignes i sta ti je cilj. E sad, pod uslovom da se radi o 8-bitnim mikrokontrolerima: ja mislim, da u vecini danasnjih aplikacija u kojima je su potrebne FP instrukcije, 8-bitni mikrokontroleri su nedovoljni. Oni se uglavnom koriste za upravljanje necim i donosenjem odluka u nekim ne mnogo komplikovanim situacijama. Kad ti u nekom projektu, FP instrukcije ¨pojedu¨ svo procesorsko vreme i ionako malu raspolozivu memoriju, onda moras da ubacis jos jedan mikrokontroler da se bavi onim ¨glupljim¨ stvarima za koje onaj sto se bavi FP poslovima nema vremena. E kad je vec tako, onda je bolje za iste pare staviti neki jaci mikrokontroler ili DSP.
Prema mojim iskustvima, gdje ima FP-a ima i digitalne obrade signala, a tu mikrokontroleri tipa 16F84 i njemu slicni nemaju mnogo sta da traze.
Najbolji odgovor ces dobiti ako pogledas sta nude komercijalni kompajleri za tu seriju mikrokontrolera koja tebe interesuje. Ako ih ima dosta koji nude i FP, onda vjerovatno ima smisla, ako ih nema onda vjerovatno nema smisla. Velike kompanije su i postale velike upravo zato sto nisu trosile pare gdje nije bilo neophodno, a uzimale gdje god je bilo moguce.

Eto, dosta je od mene o ovoj temi.
Pozdrav svima!

Evo, vidjeh sad da sam zaboravio da odgovorim koraku na gornja pitanja.
Prvo, nije mi jasno kakve veze ima Borlandovo prosirenje paskala i njegov kompajler sa mikrokontrolerima, a drugo, sto se tice linkera, uloga linkera nije da veci kod razbije na manje dijelove, jer nekad nije bilo dovoljno memorije da se sav kod odjednom komplajlira, vec linker postoji da bi se objedinilo vise source fajlova, kod programa koje su veci i koje je u dijelovima zbog velikog obima razvijalo vise programera/timova.

[Ovu poruku je menjao Odin D. dana 03.04.2007. u 21:43 GMT+1]
 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.co.yu.



+7 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna04.04.2007. u 13:35 - pre 207 meseci
Odine D.
kazes da je C najpodesniji za programiranje mikrokontrolera i da ne vidis sta bi tu
bilo bolje sa PASCAL-om. Kazes i da su tvoje varijable uglavnom bitovi OK.

Prepisao sam primer u C-u (vidis za koji je mikrokontroler), samo deo definicija iz heder fajla:
Code:

#define __AT87F51RC_H__

/*------------------------------------------------
Byte Registers
------------------------------------------------*/
sfr P0      = 0x80;
sfr SP      = 0x81;
sfr DP0L    = 0x82;
sfr DP0H    = 0x83;
sfr DP1L    = 0x84;
sfr DP1H    = 0x85;
sfr PCON    = 0x87;
sfr TCON    = 0x88;
sfr TMOD    = 0x89;


/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_   0x01
#define T0_M1_   0x02
#define T0_CT_   0x04
#define T0_GATE_ 0x08
#define T1_M0_   0x10
#define T1_M1_   0x20
#define T1_CT_   0x40
#define T1_GATE_ 0x80

/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_    0x01
#define STOP_   0x02
#define GF0_    0x04
#define GF1_    0x08
#define SMOD_   0x80
-
-

I primer gde se setuje jedan bit u inicijalizaciji programa:

TMOD |= T1_M1_;  

Ali C kompajler ce bez greske pravesti i ako je napisano:

TMOD |= STOP_;  

sto je bez sumnje greska.


Evo kako bi sve ovo izgledalo u PASCAL-u:

var
  TMOD : set of(T0_M0_,T0_M1_,T0_CT_,T0_GATE_,T1_M0_,T1_M1_,T1_CT_,T1_GATE_) absolute $89;
  PCON : set of(IDL_,STOP_,GF0_,GF1_,nc4.nc5,nc6,SMOD_) absolute $87;

i koriscenje:

  TMOD := TMOD+[T1_M1_];

dok bi:

  TMOD := TMOD+[STOP_]; 

kompajler prijavio kao greskau.


Bitovi nc4..nc6 su bili nedefinisani u primeru, pa sam ostavio da i u PASCAL primeru budu
nedefinisani, mada te konstante dobijaju vrednost 4,5,6 respektivno.

Ako ovo nije dovoljno ubedljivo, onda sigurno nece ni drugi primeri za tebe biti ubedljivi.

Ovo nije akademski primer, vec najtrivijalnije setovanje ili resetovanje bitova, ali napisano bas tako da prati misao programera i da ga ne optersecuje zebnjom da je mozda negde napravio gresku. PASCAL programeri zanaju da ako kompajler prevede program bez greske, velika je verovatnoca da ce i program ispravno raditi. Kod C-a ova verovatnoca je mnogo manja, cak i kada C kompajler prevede program bez greske, to jos uvek ne znaci da u programu ne postoji greska. Ovo je zbog toga sto je C manje strog prema kontroli tipova i sto vrsi implicitnu konverziju tipa sto cesto moze izazvati gresku. Pogledaj uslove za kompatibilnost tipova kod C-a i PASCAL-a pa ce ti ovo biti jasno.

Sto se tice linkera, nisi me razumeo. Linker ne povezuje sors fajlove vec objektne fajlove koji se dobijaju kompajliranjem. Rani racunari su imali mali RAM. pa su programi pisani u vise celina, i svaka se celina potpuno nezavisno prevodila, a linker je to kasnije povezivao. Tu sam napomenuo da greska u linkovanju tesko moze da se pozicionira u izvornom tekstu, i cesto je poruka o gresci besmislena. Iz tog razloga include fajlovi u C-u nisu moduli vec se na mestu navodjenja direktive include, slikovito receno, insertuje include fajl.

Moduli su nesto drugo, oni se ne prevode nezavisno od ostalog dela programa i predstavljaju deo strukture programa. Ja sam pravio PASCAL za AVR i on je bio jednoprolazni bez ikakve potrebe za linkovanjem. Cak i kad se rade veliki programi sa ucescem vise programera nisu potrebni linkeri (ne mislim na C) jer se uvek mogu prevoditi izvorni tekstovi svih modula. Cini se da bi linker ubrzao prevodjenje jer bi postojali objektni fajlovi svih modula, i oni moduli koji se nisu menjali kompajler ne bi prevodio, vec bi ih linker samo povezao. Ali, jesmo li sigurni koliko bi vremena potrosio linker na povezivanje svih modula, i kako bi on prijavio gresku. Mislim da bi steta bila veca od koristi. Da zakljucim linker nije neophodan, on je bio samo nuzno zlao u jednoj fazi razvoja hardvera racunara.

Konacno, C se enormno vise koristi od PASCAL-a, iako je losiji programski jezik, cak i za programiranje mikrokontrolera, ja zalim zbog toga, ali mi nije uloga da druge u to ubedjujem. Ja za sebe sam pravim razvojne alate, onako kako ja mislim da treba da budu, jedan broj njih prodam (sto minije cilj). Ako pravim asembler, onda je to isto sto i PASCAL samo su PASCAL iskazi zamenjeni asemblerskim iskazima. Tu postoje jednostavni i slozeni tipovi (skupovi, zapisi, stringovi i nizovi) programske strukture (case..of, repeat..until, if..then..else) makroi, procedure i funkcije sa formalnim parametrima, moduli. Dakle sve sto ima i PASCAL. Svojim asemblerom pisem vrlo brzo i efikasno programe, a PASCAL-om cu jos vise poboljsati svoju efikasnost, a svet neka radi sto mu je volja, ja ga ne mogu promeniti. Jedino sto mogu to je da iskreno saosecam sa mukama svakog C programera.

Hvala na sugestijama u vezi sa pokretnim zarezim.

Pozdrav.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna04.04.2007. u 20:21 - pre 207 meseci
Za koraka:

Opet cu ja da ponovim da sve to sto si ti rekao, a i ostali, nije netacno, ali ima svoje mjesto i znacaj. Te stvari vaze, ali ne univerzalno. U nekoj situaciji znacaj svega toga je povelik, a u nekoj drugoj ne bas.
Ja samo nastojim da se sva ta prica stavi u odredjeni kontekst, jer bez tog konteksta svako moze da iznosi svoja subjektivna misljenja koja nemora nicim da argumentuje, jer ga nista ne obavezuje, a to samo onda doprinosi kvantitetu postova na ustrb kvaliteta.

Da si ti odmah u startu rekao da se radi o 8051 i da si takodje naveo i ovo:
Citat:
Svojim asemblerom pisem vrlo brzo i efikasno programe, a PASCAL-om cu jos vise poboljsati svoju efikasnost, a svet neka radi sto mu je volja, ja ga ne mogu promeniti.


odnosno, da sam ja znao da ti taj kompajler pises za sebe, ja uopste ne bih ni komentarisao znacaj i primamljivost paskala u svijetu mikrokontrolera. Moja je greska sto sam ja pretpostavio da ti zelis da napises neki kompajler za sire narodne mase, a ne za licnu upotrebu, ali ne treba to puno da mi se zamjera, mislim da ni ta pretpostvka nije bila daleko nevjerovatnija od ove da pravis kompajler samo za sebe. U svjetlu tih cinjenica, meni je potpuno svejedno ako ti hoces i da napravis kompajler za COBOL, pa da u njemu programiras mikrokontrolere. Nebi mi ni padalo na pamet da komentarisem o licnim ukusima.
I jos mi nije jasno, kad vec pises taj kompajler za sebe, zar ti sam neznas da li tebi treba FP ili ne treba?

Dalje, onaj ko se ikad bavio programiranjem mikrokontrolera, mada ovo sto cu reci vazi i za PC, sigurno zna da sintaksne greske, kao i slucajno zamjenjena imena varijabli su greske koje se smatraju ¨grescicama¨ i koje se najlakse otklanjaju.
Pravi problem su konceptualne greske u razmisljanju programera i strukturi programa koja iz takvog razmisljanja proizadje.
Npr. pravo pitanje je:
zasto bi ti napisao
Citat:

TMOD |= STOP_;


To je tvoja greska, a ne greska kompajlera. I kad to pises, ti treba da imas na umu na cemu pises, da poznajes jezik i kompajler i prema tome da znas da ce kompajler to prevesti. Nemoze kompajler da misli za tebe. Ko se oslanja na to da ce kompajler da mu ispravlja bagove u mozgu, bolje da se okane programiranja i da se bavi necim drugim.
Sta mislis da li se oni koji pisu softver za pejsmejker, kontrolni toranj na aerodromu ili za kontrolu nuklearnog reaktora oslanjaju na tamo neke greske koje ce kompajler da im prijavi?
Ti i u gore navedenom primjeru u Paskalu mozes da napravis konceptualnu gresku gigantskih razmjera koja ce sintaksno da bude ispravna i koju ce kompajler da prevede.
Npr. ja i u Paskalu i u Bejziku i u bilo cemu drugom mogu da napisem program koji ce da munjevitom brzinom pokrene lift u trenutku dok putnici izlaze iz njega, pa da ih razmaze izmedju spratova. Ali kakve to veze ima sa kompajlerom i da vidim koji ce kompajler tom programu da nadje zamjerku?!
Kompajler sluzi da prevede ono sto je programer napisao, a programer treba da zna sta je napisao. Programer nije daktilograf, on treba i da misli o tome sta kuca.

Dobar program je dobar koncept, a jezik je samo sredstvo izrazavanja na kojem ce se taj koncept iskazati. Mnogo ljudi izgleda smatra da dobar program zavisi od dobrog jezika.

Najbolja platforma za razvoj je papir i olovka. Sve ostalo su detalji.



 
Odgovor na temu

korak
Nis

Član broj: 125522
Poruke: 622
*.dynamic.sbb.co.yu.



+7 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna05.04.2007. u 08:29 - pre 207 meseci
Odine D

Pocnes recenicu sa time kako se slazes sa onim sto je napisano na relaciji C-RASCAL, a odmah iza toga sve to negiras. To sto je napisano uvek vazi i univerzalno je. Napisi proizvoljnih 10 primera na C-u i ja cu ih napisati na PASCAL-u pa sam uporedi. Iza C-a je stajao proizvodjac Unix-a i veliki kapital pa nije cudo sto je danas, moze se reci, on jezik br.1 za programiranje mikrokontrolera. Ali ja hocu tebi i svima da kazem da on nije najpogodniji jezik za to, da je PASCAL bolji, ali sta ces, svet je krenuo u tom pravcu, i to nije jedina zabludqa koja dominira svetom, to valjda znas. Kontekst u koji zelis da stavis pricu je jasan: C je najpopularniji, ali zaboga, kako ne vidis da je PASCAL bolji. Ovo nije moje subjektivno misljenje, njega potkrepljuje cela teorija programiranja, i ja nemam problema sa cinjenicom sto je C popularan, radim u njemu kad moram, ali se drzim cinjenica i pravila koja su bazirana na naucnom pristupu programiranju i programskim jezicima.

Primer koji sam dao slucajno je za 8051, ja sam sa tim kontrolerom radio samo jedan projekat na asembleru i jedan na C-u (po zelji musterije), inace sada radim samo sa MC908. Zasto ti je vazna cinjenica koji je mikrokontroler u pitanju, govorimo ipak o nekoj univerzalnosti.

Greska ti je, kazes sto si mislio da pravim PASCAL kompajler za mase, a onda si shvatio da ga radim za sebe. Prvo: kao da si se uplasio da ne zarazim mase PASCAL-om, nije valjda?. Drugo: ja sam profesionalac, imam svoju firmu, i sve sto radim za sebe to je na nivou po kvalitetu da je i za mase, kako ti kazes. Znam mnoge hobiste koji za sebe prave razne postapalice (programatore i slicno) i to je samo za njihovu upotrebu. Ja sam kupio DALPHI 2006 i dobro ga platio (skoro 1000 EUR) i potrebne komponente za njega i zelim da napravim PASCAL kompajler zbog svojih potreba, ali ko zeli, bez sile i pritiska, moze da napusti C i jeftino dobije PASCAL kompajler koji cu napraviti. To radim sam i nece biti brzo zavrsen, imam i drugih obaveza od kojih treba da zivim. Na ovom podforumu sam imao temu u okviru koje sam sa mradomir (mislim da je tako) vodio prijateljsku diskusiju kako da bude definisan sam jezik, da sadrzi ono sto je potrebno za programiranje mikrokontrolera i dao je niz dobrih sugestija sta da se izbaci iz jezika, a sta da se ubaci. Ja volim da cujem sto siri krug ljudi koji se bave programiranjem mikrokontrolera, da vidim dali ih mici isto sto i mene, ili mozda i nesto drugo, kako bi definicija jezika bila idealna za njih (i mene) i da bi konacno jezik bio uzivanje za radi.

U programiranju ne postoje greske i greskice. I jedne i druge mogu da izazovu jednako fatalne greske u radu uredjaja. Ovim si me podsetio na vreme kada sam pravio racunar sa 4 bit slajsa (izvini sto nije na engleskom) familije 29000 i za koji sam pisao mikrokod od 1024 reci duzine 80 bita. Posle 5 dana trazenja greske (neka asemblerska naredba nije dobro radila zbog loseg mikrokoda zanju), nasao sam je. Bio je pogresan samo 1 bit, i mlada koleginica je prostodusno prokomentarisala: u pa to je bila mala greska. Tim gore.

Ti kao dane shvatas ulogu visih programskih jezika (a verujem da nije tako), po tebi ako programer mora da vodi racuna o svemu onda mozemo da ostanemo na asembleru, jer moracemo da se slozimo da samo asembler moze da da najefikasniji kod zar ne. Uloga visih programskih jezika, izmedju ostalog, je i da programera oslobodi svih nepotrebnih razmisljanja, kako bi se usredsredio samo na programski zadatak. Pri tome kompajler mora da prauzme na sebe sve moguce provere i da ispravlja programera tamo gde je to moguce. Primer koji sam naveo nije bez veze, on upravo govori o tome. Naravno da kompajler ne moze da ispravi logicke greske, ali to je ionako posao programera. Mozda znas za pad americkog satelita koji je imao program pisan u Fortranu. Tamo iza if idu izrazi (3): za manje, jednako i vece, razdvojeni zarezom. Programer je tacki zamenio zarezom (ili obrnuto ne mogu da se setim), a kompajler nije imao nacin da to proveri (takav je Fortran) i satelit je posle lansiranja pao u Atlandik (zbog jednog zareza) iako je program logicki bio dobar. E vidis, jezik mora da otkrije sto je moguce vise gresaka, prakticno da saradjuje sa programerom. Ima jedna greska koju kompajler prijavljuje, a moze se uvrstiti u logicke greske, a to je da ne dozvoljava da brojacka varijabla u for petlji bude globalna, niti da se u okviru petlje modifikuje. Sta kazes na ovo?

Kazes da programer nije daktilograf i da mora da misli o tome sta kuca. Sa tvojim prostupom, programer je bas daktilograf, jer mora da razmislja kako bese ime varijable, koje je slovo veliko, kojeg je tipa varijabla i t. d. Dobar jezik moze to preuzeti na sebe, a programer da razmislja samo o logici algoritma i strukturi programa.

Dobro si primetio da je programski jezik samo alat (ti si ga nazvao sredstvom) i da od njega ne zavisi koliko ce kvalitetan biti program. Ogromna zabluda, pitaj one koji su radili projekte sa najmanje 100000 linija koda pa ces dobiti pravi odgovor. Opste je poznato da od kvaliteta alata sa kojim se radi zavisi i kvalitet proizvoda, a ja cu ti napisati samo dva citata:

1: Programeri su uvek okruzeni slozenoscu, to ne mozemo spreciti. Nase primene su slozene jer smo ambiciozni da upotrebimo nase racunara na sve promisljenije nacine. Programiranje je slozeno zbog velikog broja protivurecnih ciljeva pri svakom pojedinom projektu. Ako nase osnovno sredstvo, jezik u kome zamisljamo i pravimo programe, isto tako bude komplikovan, on i sam postaje deo problema umesto da bude deo resenja. (Hoare 1981).

2. Alatke koje koristimo imaju dubok (i neprimetan) uticaj na nase umne navike i, dakle, na nase umne sposobnosti. (Edsger W. Dijkstra).

Nedaj da ovo pod 2 pocne da deluje na tebe.

Srdacan pozdrav.
 
Odgovor na temu

mradomir
mradomir
Novi Sad

Član broj: 123964
Poruke: 169
*.zrlocal.net.



+28 Profil

icon Re: Aritmetika u pokretnom zarezu-koliko je neophodna05.04.2007. u 23:58 - pre 207 meseci
Brojevi u pokretnom zarezu su obavezni i kod 8-bitnih MCU.
Lično sam ih koristio u dosta projekata.
Obično se na osnovu vrednosti AD konvertora putem
neke funkcije (matematičke) dobija merena veličina.
Ta funkcija redovno zavisi od floating point brojeva.
Primer:

MerenaVrednost := 3.25*ADkonvertor-155;

Nemam ništa protiv da se to uradi preko neke
funkcije. Jednom mi je zatrebao uvid u kod
floating pointa, ali pošto je bio integrisan u
kompajler ništa od toga.
Nisam siguran kako bi se to izvelo, pretpostavljam
da bi imao promenljivu tipa real ali je ne bi
koristio u izrazima već kao rezultat u pozivu funkcije,
ili tako nešto?? Molim te razjasni malo, daj neki primer.


Što se tiče off topic-a čiji je veći c-ov ili pascal-ov,
da li je neko probao php.
Ceo svet ga koristi, a ja se krstim i vičem je.. ga ko ga izmisli.
Otprilike 50% vremena sam gubio na debagovanje pogrešno
otkucanih imena promenljivih. U php-u sve prolazi. Šta god
otkucao njemu je OK. Nema definisanja promenljivih pa ako
pogrešite u jednom slovu on će veselo izvršiti kod ali rezultat
neće biti očekivani, tako da se više skoncentrišete na kucanje
nego na samu ideju programa.
Izgleda da su kompajleri dostigli svoj vrhunac pa mogu samo
da nazaduju. Šta mislite o ovome?


 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Aritmetika u pokretnom zarezu-koliko je neophodna

Strane: 1 2

[ Pregleda: 8610 | Odgovora: 26 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.