[ korak @ 26.03.2007. 13:03 ] @
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.
[ Odin D. @ 28.03.2007. 12:50 ] @
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.
[ grabik @ 28.03.2007. 21:41 ] @
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:)




[ obranko @ 29.03.2007. 03:37 ] @
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
[ sdurut @ 29.03.2007. 22:26 ] @
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.
[ zofr @ 30.03.2007. 23:37 ] @
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.
[ Odin D. @ 01.04.2007. 16:54 ] @
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.

[ korak @ 02.04.2007. 11:46 ] @
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.
[ indicator1 @ 02.04.2007. 12:15 ] @
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.
[ korak @ 02.04.2007. 15:47 ] @
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.
[ grabik @ 02.04.2007. 21:19 ] @
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.



[ zofr @ 02.04.2007. 23:19 ] @
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.
[ grabik @ 03.04.2007. 06:39 ] @
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
).
[ korak @ 03.04.2007. 10:43 ] @
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.
[ grabik @ 03.04.2007. 18:57 ] @
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);
[ Odin D. @ 03.04.2007. 20:32 ] @
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]
[ korak @ 04.04.2007. 13:35 ] @
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.
[ Odin D. @ 04.04.2007. 20:21 ] @
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.



[ korak @ 05.04.2007. 08:29 ] @
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.
[ mradomir @ 05.04.2007. 23:58 ] @
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?


[ korak @ 06.04.2007. 09:18 ] @
Pozdrav mradomir-e,
Bas sam se obradovao kada sam video tvoju poruku, nije te bilo 2 meseca, sigurno si imao neku frku.

Uopste nisam protiv real (ili float) tipa u izrazima, samo sam hteo da vidim koliko programera to koristi. Ali izgleda da neki vise redova ispisu na forumu nego sto ispisu redova programskog koda. Ipak, zahvalan sam nekolicini koja je konkretno odgovorila, a sve ostalo se svelo na diskusiju: sta ce nam PASCAL kada je C super za programiranje mikrokontrolera.

Znas da sam kupio Delphi 2006 (dao sam skoro 1000EUR) i kupio sam ADVMemo od firme TMS Software (jeftino 40EUR). Ali sa ovom komponentom imam probleme. Ranije sam koristio njihov SyntaxMemo sa parserima i to je lepo funkcionisalo. Imao je funkcije da vrati token indeks i token rec (zavisno od pozicije u tekstu) sto je neophodno za sintaksnu analizu. Sada ADVMemo (poboljsana verzija u anglosaksonskom smislu) je sarenija komponenta ali nema parser u vidu tekst fajla. Ima komponentu sintaks stajler sa svojstvima koja dozvoljavaju da se definisu razne grupe reci sa posebno definisanim fontom i atributima. Medjutim ima funkciju koja vraca token na poziciji X,Y kursora (a ne teksta-uzas) pa stalno mora da se pretvara pozicija u tekstu na poziciju X,Y. Sto je najgore vraca token i ako je X,Y na nekoj reci koja je u komentaru, katastrofa. To nije moglo da se desi u SyntaxMemo. Osim toga postoje svojstva za reci koje oznacavaju pocetak i kraj programskog bloka (begin..end) i automatski taj par reci oznaci kada je kursor izmedju njih. Ali ako imas case..end ili repet..until potpuno si nemocan. Help je nikakav pa se mucim da nesto smisleno napravim sa ovom komponentom. To me mnogo usporava u pisanju editora.

Na kraju, ipak cu biti za to da postoji tip sa pokretnim zarezom u izrazima. Razmisljam samo o formatu. Mislim da osnovni bude 8 bita eksponenta i 24 bita mantise. Video sam da signal procesori imaju i format 16 bita eksponenta i 16 bita mantise, sto je razumljivo za te aplikacije. Pitanje je dali pored osnovnog tipa pokretnog zareza treba jos neki, i dali da se ide prema ovome sto je u signal procesorima, ili prema vecoj mantisi. Veca mantisa znaci vecu tacnost i na kvadrat vise procesorskog vremena. Dakle ako postoji real, dali dodati shortreal ili longreal ili ne dodati nista, s obzirom da su svi ucesnici ove teme pisali da su u 2..3% slucajeva koristili realnu aritmetiku.

Srdacan pozdrav.

[ mradomir @ 07.04.2007. 00:32 ] @
Prvo da se izvinim što me nema neko vreme,
nekako se nakupilo gluposti koje više imaju
veze sa knjigovodstvom nego sa našom strukom,
ali šta ćeš i sam znaš kako je kada imaš firmu.

Kada je preciznost u pitanju nisam imao potrebe
za nečim boljim od 8+24, odnosno da budem precizniji
1 bit znak, 8 bita eksponent i 23 bita mantisa.
Po IEEE standardu to je "single". Mogu ti poslati
ako ga nisi skinuo (standard).

Parser... hm.. pa evo šta sam ja zaključio posle mnogo
razmišljanja. Editor je tu da izgleda šareno i da pomaže
programeru prilikom pisanja koda. ADVMemo stvarno tu
prednjači. Ja sam istu stvar odradio sa SynEdit-om.
Njegova uloga prestaje kada se klikne na COMPILE.
Dalje stvar prihvata skener koga sam ručno napisao.
Njegov zadatak je da učita fajl u memoriju, čita karakter
po karakter, prepozna tokene (ključne reči), preskače
komentare i slično. Parser od skenera preuzima tokene
proverava sintaksu, poziva generator koda itd.
Tu sam mnogo puta počinjao ispočetka jer mi se nije
svideo kod koga sam malo po malo krpio i dorađivao.
Preporučio bih ti da se uzdaš "u se i u svoje kljuse",
dakle definiši šta je trebalo da odrađuje ADVMemo
(a neradi), pa napiši svoj kod.

Nadam se da sam bar malo pomogao.

Pozdrav,
mradomir.
[ Odin D. @ 07.04.2007. 11:55 ] @
Dragi korak,
iako ova tema poprima neki ton koji mi se nikako ne svidja, i rado bih sa tim zavrsio, pokusacu jos jednom da kazem o cemu ja pricam, a o cemu ne pricam.

Da ne bih odlutao u neke vlastite vizije, pokusacu da sto direktnije odgovorim na tvoj post, direktno odgovarajuci na tvoje recenice.
Dakle,


Citat:
Ali ja hocu tebi i svima da kazem da on nije najpogodniji jezik za to, da je PASCAL bolji

Ja uopste nisam zainteresovan za taj dokaz. Vec 50-tak godina se sirom svijeta vodi polemika oko toga bez pojave nekog vizionara koji bi me ubjedio da li je C bolji od Paskala ili Paskal od C, pa sumnjam da bi me i ti ubjedio.
Po mom misljenju, slicnost tih jezika je dovoljno velika, a i svi noviji kompajleri jednog jezika imaju tendenciju da u sebe ugradjuju osobine onog drugog koje ih poboljsavaju, tako da je za mene ta rasprava bespredmetna.
Ako se potrudis da malo pazljivije procitas ono sto sam ja pisao, mogao bi da vidis da sam ja pisao o trenutnom stanju embedded industrije i sta je iz te perspektive ¨smislenije¨ (molim te obrati paznju da sam napisao smislenije, a ne bolje), a ne koji je jezik bolji iz akademske perspektive, ili iz perspektive programiranja za PC.


Citat:
Zasto ti je vazna cinjenica koji je mikrokontroler u pitanju, govorimo ipak o nekoj univerzalnosti.

Ja sam mislio da govorimo o nekom konkretnom primjeru (neces valjda da napravis univerzalni kompajler za sve mikrokontrolere!?), a ne o akademskoj univerzalnosti, jer si ti sam poceo temu sa pitanjem o potrebi FP za mikrokontrolere, a onda zahtijevas neku univerzalnu pricu o Paskalu i C-u na svim platformama iz proteklih pola vijeka. Ja nevidim smisao toga.


Citat:
Prvo: kao da si se uplasio da ne zarazim mase PASCAL-om, nije valjda?

Ovakvi komentari me bas ne inspirisu na dopisivanje. Ja sam uvijek za salu, ali ovo mi ima neki drugi prizvuk. Mada mozda gresim.


Citat:
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.

Ne sjecam se da sam napisao nesto, sto bi te izazvalo da se ovim pravdas.

Citat:
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.

Pratio sam tu temu, i da sam imao nesto da kazem protiv Paskala, ja bih to vec tada i tamo napisao.

Citat:
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.

Kada trazis necije misljenje, mislim da treba da budes spreman na negativne kritike jednako kao i na pozitivne. Negativne kritike su u vecini slucajeva korisnije od pozitivnih. Ne trebas se nalaziti uvredjenim ako neko izrazava negativan stav, vec pokusati da iz toga izvuces nesto korisno.
Moze se desiti da je negativna kritika i opravdana. Meni se to desava cesto, ali nemam problema sa tim.

Citat:
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 ....

Mozda znas za pad americkog satelita koji je imao program pisan u Fortranu. Tamo iza if idu izrazi ....

Ja nisam mislio na greske u runtime nego greske u vreme pisanja i debagovanja. U vreme izvrsavanja potpuno je nebitno da li negdje fali zarez ili je algoritam za proracun putanje satelita pogresan ili neko nije nesto dobro zalemio. Sve te greske su fatalne.

Citat:
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.

Ovo je tacno, ali se pri ovakvoj nekoj izjavi ona mora staviti u neki odredjeni kontekst. Ja sam nedavno saradjivao na jednom projektu ciji je glavni cilj i ideja vodilja za sve bio: da bude ako je moguce jeftiniji od kineskog ekvivalenta, ili bar ne skuplji. E da je u takvom slucaju koriscen neki procesor u kojem bi se projektant mogao raspistoljiti u nekom programskom jeziku visokog nivoa apstrakcije, to bi kostalo ne manje, nego tri puta vise od kineskog uredjaja. To su zakoni trzista. Naravno da je lakse napraviti dig. kameru na visual Basicu nego na C-u, ali nije pitanje sta je lakse, nego sta ces moci da prodas, a to neces moci sigurno, ako si koristio procesor koji je tri puta skuplji nego onaj kod konkurentske firme jer ti je bilo udobnije objektno programiranje od klasicnog.
Tako ti je npr. i kod PC, kad se radi o proizvodnji najzahtjevnijih 3D igrica. Pisi ti njih i u cemu god hoces i u cemu je tebi lakse i udobnije, ali nijedan danasnji PC ih nece svariti ako nisu pisane u C++. I sta tu meni znaci sto je Java portabilnija i udobnija kad to ne moze da radi?


Citat:
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.

Ja ne znam za neki programski jezik u kome programer ne mora o ovom da razmislja (izuzev za velika slova). A i sto se tice velikih slova, meni to olaksava, a ne otezava posao, jer ih ne koristim stihijski, vec po konvenciji koje se drzim, te mogu odmah da vidim iz upotrebe velikih slova u imenu varijable da li je to funkcija, varijabla, klasa... Slobodu jezika treba usmjeriti u svoju korist, a ne nemarnim odnosom prema njoj sebi otezavati posao.
Ako nekom smeta sto je a =+ b isto sto i a = a + b, onda neka se drzi jedne od te dvije stvari, niko ga netera da nasumice kuca jedno ili drugo,i ja ne vidim sta je tu toliko problematicno.
I kao sto sam vec ranije rekao, malo veca sloboda nego sto je to uobicajeno, mala nedorecenost u nekim stvarima i slicne druge stvari koje postoje u C su namjerno ostavljene za one kojima bi to moglo zatrebati (a u vreme nastanka C-a i s obzirom na njegovu svrhu i namjenu) takvih je bilo mnogo. Zasto npr. tip int nema fiksnu velicinu - pa zato da bi se maksimalno iskoristila masina na kojoj ce program da radi. To pravi probleme oko prenosivosti, ali kad su performanse u pitanju, iskoristi masinu kolko mozes, a kad je prenosivost u pitanju, ogranici se na minimum koji standard garantuje i to je to. Ne moze se o toj osobini jezika govoriti, a da se to nestavi u neki kontekst. U nekom slucaju to je dobro, a u nekom lose. Ja sam srecan kad imam mogucnost da biram, a ne ko onaj magarac sto je stalno gledao lijevo-desno na hranu s ove i one strane, nije mogao da se odluci kud bi prije, pa crko od gladi.

Citat:
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

Ko pise lose programe u C-u, pisace lose i u Paskalu. I obrnuto. I opet cu pokusati da stavim stvari u kontekst: najmanje 100 000 linija koda na 8-bitnom mikrokontroleru?!


Citat:
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.

Na ovo cu odgovoriti tvojim rjecima:
Citat:
To sto je napisano uvek vazi i univerzalno je.


Jos jednom puno pozdrava svima,
ja mislim da ja nemam vise nista pametno da dodam na ovu pricu o C vs Paskal.
Bilo bi mozda dobro da se tema usmjeri na ono pitanje o kome je i pocela.

[Ovu poruku je menjao Odin D. dana 07.04.2007. u 13:05 GMT+1]

[Ovu poruku je menjao Odin D. dana 07.04.2007. u 13:09 GMT+1]
[ korak @ 09.04.2007. 11:22 ] @
Odin D.:

OK, nema smisla da dalje raspravljamo. Nisam imao nameru da uputim ni jednu uvredu, ako jesam izvini. Ponekad u rasparavama volim da pojacam kontrast izmedju dva stava da bi diskusija bila plodotvornija. Aii vidim obojica smo dovoljno tvrdoglavi da to ne pomaze.

Pozdrav.
[ mradomir @ 09.04.2007. 21:24 ] @
A taman postade zanimljivo :-(
[ korak @ 10.04.2007. 10:12 ] @
Ne vredi gubiti vreme mradomir-e.

Ponudio sam da Odin D napise 10 primera na C-u (za koja misli da je prednost na strani C-a, naravno da nisu besmisleni) ali on je to zaobisao i u zadnjem tekstu se bavio analizom onoga sto sam ja napisao.

Inace jos se mucim sa AdvMemo, tezi je za koriscenje, a pravili ga da bude laksi od SynMemo (anglo-saksonska logika).

Pozdrav.
[ indicator1 @ 13.04.2007. 13:53 ] @
Citat:
mradomir: 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;

Ne bih da se pravim pametan ali ovo je odlican primer za sta ne treba koristiti FP racun.
Ovo se racuna kao Merene vrednost:= (52*ADkonv-2480)/16, integer deo se dobija jednostvano siftovanjem ulevo za >>4, decimalni deo se dobije ili lookup tabelom ili tezinskim koeficijentima za cetiri bita koja ispadnu. Mnozenje sa 16 uzeto pod pretpostavkom da je AD konv 10-bitni, a da kompajler zna da radi sa 16-bitnim integerima(ja jos nisam video neki koji to ne ume). Ovo je neuporedivo brze od FP racuna, koji ne samo zna da bude spor na 8-bit MCU nego jos operise sa toliko korisnih resursa i brlja po steku da treba strogo voditi racuna kad se koristi npr-u interapt rutini, onda je uvid u generisani ASM neophodan da vidis sta se stvarno desava.