[ strš @ 20.05.2010. 23:18 ] @
Pozdrav.
Kao prvo nemam znanje oko programiranja tako da ova pitanja su uopštena da bih uopšte počeo da shvatam suštinu.
Prvo na netu ima "brdo" dokumentacije,tutoriala u vezi programiranja ali ne mogu da nađem sebe u celoj toj priči.Nešto mi fali ali ne znam šta(verovatno škola).Želim da naučim da programiram mikrokontrolere u asembleru (za početak) pa me interesuje da li je isto programiranje softwera i mikrokontrolera(mislim da li je set instrukcija isti)?
Drugo da li je asembler ima određeni set funkcija i to je to,pa sa njihovom kombinacijom dođeš do programa koji si hteo ili svaki mikrokontroler ima svoj set instrukcija?
Treće ako imam zapis u hex fajlu da li mogu sa nekim (kojim?) programom da "prebacim" u aseblerski zapis da bih pokušao da isčitam taj program?
Četvrto ako i uspem da prebacim u asm fajl na koji način da pokušam da shvatim program tj. odakle da počnem?
Za sada toliko.Ovo pitanje sam postavio i u forumu asembler jer nisam siguran gde treba da postavim pitanje.
Još jednom pozdrav i nezamerite na možda glupim pitanjima.
[ shpiki @ 21.05.2010. 01:37 ] @
1) Definiši kako misliš isto? U osnovi je jako slično...
2) Asembler kao asembler je "isti", ali nećeš uvek koristiti iste instrukcije za svaki uC
3) Možeš, traži po netu dissasembler
4) Od početka :D
Koliko je meni poznato (ne bavim se asemblerom) rsinisa i/ili Sepa011 se bave asm-om, pitaj ih za pomoć, siguran sam da ćeš tako najlakše rešiti probleme...

Pozdrav!
[ bogdan.kecman @ 21.05.2010. 01:48 ] @
strš, nemoj da gubis vreme na asm. ako asm naucis "najbolje na svetu" to ti i dalje nece pomoci da posle "brze" naucis C ... razvoj u asm-u je znacajno sporiji nego u c-u, odrzavanje aplikacije je znacajno teze i skuplje a prebacivanje aplikacije sa procesora na procesor je vrlo skupo. Svi jaci mikrokontroleri danas imaju C kompajler .. cd PIC varijantu imas C kompajler za SVE generacije, i za one najmanje i za one najvece... za ove manje (10F, 12F, 16F) C kompajleri kostaju neke pare (mada za one najmanje mozes da koristis demo verzije sa 2K limitom posto ti najmanji ni nemaju vise flash-a) a za one vece 18F, dsPIC, 32, 33.. imas dzaba verziju kompajlera direkt od microchip-a koja dolazi sa svim mogucim bibliotekama koje ti trebaju ... u atmel varijanti imas dzabe open source C kompajler, odlican i odlicno podrzan kompajler, radi savrseno i mislim da pokriva celu atmel ekipu, u TI varijanti zavisno od mcu-a za MSP430 imas mspgcc koji je isto open source i isto dzaba i isto odlican ..

ako ti je neko rekao da "moras prvo da naucis asembler" da bi radio nesto drugo, reci mu da su 60te davno prosle... ja sam za PC programirao u asm-u godinama, nikad mi to u zivotu posle nije trebalo .. za mcu, super je sto u asm-u mozes da naguras tri ipo funkcije vise u isti procesor, ali ako uzmes u obzir da isti takav procesor sa 2x vise flash-a kosta dodatnih 0.1$ razmisli da li tvojih nedelju dana zivota koje si potrosio vise da bi to uradio u asm-u vredi tih 10dinara razlike !!
[ Sepa011 @ 21.05.2010. 09:27 ] @
@spiki: ja nisam covek od asm-a

Pisanje aplikacija u ASM-u traje predugo. BASIC (Proton+) i C su jezici koje 'govorim'
[ shpiki @ 21.05.2010. 17:00 ] @
Izvinjavam se, pogrešno sam procenio stvari!
Dakle, ostaje mu još rsinisa, ako me i on "ne pobije".

Pozdrav.
[ veselinovic @ 21.05.2010. 17:35 ] @
Koliko ja znam Sinisa prica iskljucivo bejzik tako da je slaba fajda.
Asm samo i iskljucivo samo dio koda koji bas treba puno puta da se izvrsi pa zbog vremena iako i to slaba fajda.
[ macedo @ 21.05.2010. 18:23 ] @
Kod Microchip-a u samom Microchip Data Sheet imash jedan deo koji se zove INSTRUCTION SET SUMMARY. Tu su ti lepo objashnjene sve instrukcije koje mogu da se koriste pri programiranju datog microkontrolera. Procitaj ih i potrudi se da shvatish njihovu sushtinu, pa tek onda idi na pisanje programa pa makar i najednostavnijeg. Ako se osvrnesh na tutorijale bez poznavanje pravog znacenja funkcija ulazish u ''petlju'' i nema napredka. Nemoj gubiti vreme na kontinuirano trazenje primera vec nasoci svoju energiju shto bi neko rekao ovde na forumu ,,Uciti ,uciti i samo uciti,, na razumevanje datog programa-tutorijala. Tokom vremena cesh videti sta ti znaci assembler.
[ ZZIKA @ 21.05.2010. 18:29 ] @

Početnik koji tek ulazi u svet mikrokontrolera ne bi trebao da krene sa Assemblerom, jer će vrlo brzo izgubiti volju za programiranjem.

Nije loše početi sa BASICom, pa vremenom preći na C. Po meni - tako će se najlakše savladati materija i najbrže doći do željenih rezultata.

[ sinisa_s @ 21.05.2010. 22:45 ] @
I moj glas za C. Asembler nemas razloga da ucis. Svaka arhitektura mcu-a ima razlicit asemblerski jezik i samo ces izgubiti nerve. Kao sto su ljudi vec rekli danas memorije na mcu imas sasvim dovoljno kao i na svakom kucnom racunaru pa je ne treba stedeti. Retke su situacije gde treba nesto napisati u asembleru da bi dobio nesto malo na vremenu ili memorijskom prostoru a to tebi kao pocetniku nece trebati sigurno. Odluci se za neki mcu, imas ovde na forumu dosta informacija i pocni polako sa C-om. Koji god mcu izaberes ima jako puno literature koju mozes da koristis (na engleskom). Ne znam sta sve ima na srpskom, to malo potrazi.

Pozdrav.
[ _str_ @ 21.05.2010. 22:55 ] @
Samo ti kreni proucavati asembler i to kao dobar pocetak.
[ strš @ 21.05.2010. 23:47 ] @
Pozdrav svima.
Zadivljen sam brzinom i "količinom" odgovora,ali stvarno!Hvala puno.
Koliko sam shvatio asembler je zastareo sistem za programiranje mikrokontrolera tako da mi je najbolje da počnem sa basic-om.Za sada nije mi važno sa kojim ću programom raditi,poenta je da u mojoj glavi shvatim na koji način i kojim redosledom se programira.
Ako assembler ,ili neki drugi program, ima set instrukcija (30 ili50...) da li te instrukcije koristiš (samo koje su ti potrebne) i nijedne druge (logično jer ih nema više)? DA ili ne?
Ima li sličnosti između programiranja (uzmimo BASIC) mikrokontrolera i neke aplikacije za računar?(možda sam lupio pitanje)
Da preformulišem pitanje,ako BASIC ima 30 set instrukcija (MOVLW,CLRW,SUBLW...) da li te instrukcije imaju isto značenje za programiranje mikrokontrolera i aplikacije za računar tj. ako znam da programiram mikrokontroler (čitaj poznajem set instrukcija) onda ću znati i da programiram aplikaciju u računaru?Da ili ne.
Ovi odgovori su mi potrebni da rasčistim nedoumice u svojoj glavi.
Ako ste još tu imam još nekoliko pitanja.
Da li je U BASIC-u set instrukcija isti za sve mikrokontrolere samo se menjaju adrese na kojima se upisuje podatak?DA ili ne.
Pokušaću da vam objasnim kako ja trenutno "vidim" programiranje.
Uzmimo za primer STATUS registar (primer sam uzeo iz knjige PIC mikrokontroleri).Upišem STATUS i 7bita u hex obliku (za sada nebitno).Sama reč STATUS ima neko značenje ali mi nije jasno da li je ova reč povezana sa mikrokontrolerom ili sa programom u kom pišem (recimo BASIC ili assembler-nebitno)?Ako je sa mikrokontrolerom da li to znači da prvo moram da nađem njegov datasheet i da naučim njegove set instrukcije?Ako je sa programom u kom pišem (recimo BASIC ili assembler-nebitno) da li to znači da je za sve mirokontrolere reč STATUS istog značenja?
Dalje ,posle reči STATUS ide podatak od 7 bita gde svaki bit ima neku funkciju da uključi (1) ili isključi (0) nešto(primer u knjizi bit0-prenos, bit1-DC prenos, bit2-indikacija nultog rezultata, bit3-Power down bit, bit4-TO prekoračenje sigurnosnog brojača itd.)?Da li su ovi bitovi za svaki mikrokontroler različiti i mora da se prvo pročita koji je za šta zadužen u datasheet-u?
Dosta za sada sa pitanjima jer ako nastavim nigde kraja.Ako imate strpljenja pomognite mi da shvatim celu priču.
Znam da ima tutorijala ali nemože da se nađe baš sve što ti nije jasno.Smatram da ću ovako pre da savladam programiranje.Naročito ako ima ljudi koji žele da objasne.
Izvinjavam se ako sam neko pitanje postavio koje nema veze,to je samo iz neznanja.
Još jednom hvala puno!
[ rsinisa @ 22.05.2010. 07:56 ] @
Ajde da probam i ja da pomognem. Da, koristim asembler i u početku sam pisao isključivo u njemu dok me drugar nije ubedio da predjem na PBP, čemu sam se ja dugo protivio. Sada radim 99% programa u PBP-u kombinovano sa ASM-om.

Kao prvo, asembler je veoma koristan i jako je dobro poznavati ga jer samo pomoću njega programer ima potpunu kontrolu. Npr. u PBP-u ne postoji naredba za pauzu od npr. 3 µs. Da bi je realizovao, treba poznavati ASM instrukcije, njihovo trajanje, kao i kako izračunati vreme izvršenja ASM instrukcija.
Medjutim, činjenica je da je razvoj programa u višim jezicima brži, pa i lakši, ali i to donekle zavisi od seta instrukcija za dotični kontroler, kao i od iskustva programera i već realizovanih programa jer može neke funkcije koje je realizovao da kopira iz svog već napisanog programa.
U ASM-u ne postoje mnoge instrukcije, pa čak i one naizgled najjednostavnije. Npr. neki kontroleri nemaju instrukciju poredjenja tipa manje-veće-jednako već se ona realizuje oduzimanjem pa proverom flegova. Većina nema ni instrukciju množenja ili deljenja već samo sabiranja i oduzimanja.

Prenosivost jeste manja kod ASM-a nego kod nekog višeg jezika, naročito ako se program prepravlja za kontroler drugog proizvodjača, mada ja lično do sada nisam imao takvu potrebu. U okviru jednog jezgra promene su minimalne. Za prenosivost je najbolji C jer se proizvodjači kompajlera uglavnom drže standarda. Za početnika koji ne zna skoro ništa o samom programiranju možda je ipak najbolji neki BASIC pošto je, po meni, jednostavniji za shvatanje samog principa programiranja.

Medjutim, sve je individualno: ako neko hoće što pre da napravi svoj prvi program, onda BASIC. Ako hoće da ima dobre temelje, onda ASM, ali će trebati više vremena. Ako hoće da radi na raznim kontrolerima ili da se zaposli u nekoj firmi koja upošljava programere za µc (mikrokontrolere), onda C. Ovo, po meni, važi za apsolutnog početnika.

To bi bilo opšte, a sad u drugom postu idu odgovori.

Pozdrav.
Sinisha
[ rsinisa @ 22.05.2010. 09:00 ] @
@ strš
1. Set instrukcija nije isti. Nije isti čak ni kod 2 proizvodjača istog jezika za PC računare. A i sasvim je drugi tip programirana u pitanju - svaki uredjaj sa µc ima različit hardver za razliku od PC-a koji uglavnom ima isti hardver oko sebe.
2. Svaki kontroler ima svoj set instrukcija. Oni sa istim jezgrom imaju iste instrukcije, a u okviru familije može da postoji veći ili manji set instrukcija, dok u okviru različitih familija istog proizvodjaća može da bude većih razlika.
3. Kao što reče shpiki, može i taj program se zove disasembler. E sad, asembler je opet kompajler koji prevodi ASM instrukcije u mašinski kod, što je u stvari osnova svakog procesora odn. mikrokontrolera. Čak i medju asemblerima postoje razlike, mada su one minimalne i najčešće se svode na to kako se označava npr. dekadni sistem, kako hexa i sl. Najveće razlike su u pseudo instrukcijama i već ugradjenim makroima u sam asembler tako da jedan ASM program verovatno neće proći kroz sve asemblere iako su predvidjeni za isti kontroler. Takodje i disasembler može da da listing koji neće proči kroz svaki kompajler, ali se tu stvari lako popravljaju.
4. Shvatiti program nije lako pogotovo ako nemaš shemu uredjaja jer, za razliku od PC-ja koji uglavnom ima isti hardver, kao što već rekoh, svaki uredjaj sa µc je drugačiji. Ti možeš da razumeš program, ali bez sheme nećeš da shvatiš zašto je to tako i šta se time dobija. Pa čak i ako imaš shemu, razumevanje programa može da bude veoma teško kod složenijih uredjaja. Medjutim, mislim da to ne treba da te brine - projekti koji su slobodni obično idu sa sorsom, dok kod onih koji nisu kontroler je zaštićen od čitanja.

Odgovori na tvoju drugu poruku:
Ne, asembler nije zastareo, ali se danas "pametni klinci" (ne želim nikoga da vredjam) ne bave asemblerom i onda se pišu ogromni neoptimizovani programi u višim programskim jezicima koji rade sporije nego što bi trebalo i zauzimaju više memorije nego što bi trebalo pa se pribegava bržim i snažnijim kontrolerima. Naravno, rečeno je već da su razlike u ceni za kontrolere sa više memorije male, i to stoji, ali to mene počinje da podseća na PC - danas ti treba bar 2 Gb RAM-a i dvostruko jezgro u procesoru (za one sa engleskog govornog područja - dula core) da bi napisao i najkraći .doc dokument. No, to je već stvar ličnog afiniteta i mislim da ne treba širiti priču dalje.

Od instrukcija koristiš one koje su ti potrebne od onih koje su na raspolaganju u konkretnom µc.

Instrukcije mogu, ali ne moraju da imaju isto značenje u nekom jeziku za PC i µc. Npr. ti ni u jednom BASIC-u za PC nemaš instrukciju tipa EEPROM jer jednostavno nema potrebe za njom. Znači, ako znaš da programiraš PC ne znači da znaš da programiraš i µc, ali su neki principi isti.

Ne, kao što rekoh, svaki proizvodjač ima svoj set instrukcija i svoju sintaksu, mada i tu, kao što rekoh, postoje neki standardi (npr. LET, GOTO, GOSUB i sl.), a kod BASIC-a ne radiš sa adresama već sa promenljivima, tako da adrese nisu bitne.

Reč STATUS kod PIC kontrolera je nešto što se zove rezervisana reč i ima ih u svakom programskom jeziku i ovde je povezana sa mikrokontrolerom jer je proivodjač dao to ime jednom od registara specijalne namene. Ne znači da je i kod drugih proizvodjača µc ta ista reč rezervisana. Odgovore na ovakva pitanja dobiješ kada DETALJNO proučiš sve podatke za konkretan kontroler i kompajler. Moj najkorisniji savet koji često dajem je "Čitati, čitati i samo čitati".

STATUS nema 7 bitova već 8, kao i svi ostali registri za tu familiju. Suština je da je svaki proizvodjač nazvao registre kako je on hteo i odredio značenje bitova.

To bi bilo otprilike to mada nije lako neke stvari objasniti u par rečenica - mnogo toga je preskočeno ili nedorečeno, ali vremenom će ti sve biti jasnije.

Pozdrav.
Sinisha









[Ovu poruku je menjao rsinisa dana 22.05.2010. u 10:15 GMT+1]

[Ovu poruku je menjao rsinisa dana 22.05.2010. u 13:33 GMT+1]
[ Odin D. @ 22.05.2010. 18:59 ] @
Izbor izmedju asemblera i C-a moze postojati jedino na hobistickom nivou, ako se neko bavi mikrokontrolerima na nacin kao sto se npr. bavi pecanjem ili rjesavanjem ukrstenica.
Iluzija je da postoji neka mogucnost profesionalnog bavljenja ovom strukom na nivou asemblera.

Citat:
Ne, asembler nije zastareo, ali se danas "pametni klinci" (ne želim nikoga da vredjam) ne bave asemblerom i onda se pišu ogromni neoptimizovani programi u višim programskim jezicima koji rade sporije nego što bi trebalo i zauzimaju više memorije nego što bi trebalo pa se pribegava bržim i snažnijim kontrolerima. Naravno, rečeno je već da su razlike u ceni za kontrolere sa više memorije male, i to stoji, ali to mene počinje da podseća na PC - danas ti treba bar 2 Gb RAM-a i dvostruko jezgro u procesoru (za one sa engleskog govornog područja - dula core) da bi napisao i najkraći .doc dokument. No, to je već stvar ličnog afiniteta i mislim da ne treba širiti priču dalje.

Bilo kakav netrivijalni projekat, na kojem radi 3+ ljudi u 99.9% slucajeva ne moze da se realizuje u asembleru u okviru rasplozivog vremena i sredstava. Tj. svaki takav pokusaj je u startu osudjen na trzisnu propast.
Mikrokontroleri koji otvaraju vrata od garaze kad dvaput zatrubis, ili pale svjetlo kad se smraci, drmaju neko motorce napred-nazad i posalju neku porukicu na neku magistralicu kad ocitaju temp. na senzoru... i tome slicno - moze i asembler.
Probaj da napravis neki ruter pa pisi protokol stack u asembleru ili algoritam rutiranja, ili algoritam za neki malo komplikovaniji proces od pomjeranja cnc-glave, pa ces da vidis dokle ces da doguras sa asemblerom.

Programi nisu nepotrebno veliki, niti su procesori nepotrebno brzi ili memorijski zahtjevi nepotrebno veliki. Razvoj tehnike je uslovio da su te stvari jednostavno postale dovoljno jeftine u usporedbi sa ljudskim radom. Ti mislis da je nepotrebno da neki programcic trosi tolike resurse, a trziste kaze da je nepotrebno da se neki programcic razvija tri godine u asembleru ili tri nedelje u C-u, umjesto tri dana u JAVI. Da bi napravio HID interfejs neke proizvodne linije koja kosta 3 mil $, potreban ti je "nepotrebno velik" processor od 50 evra, gotove biblioteke od 200 evra i 3 dana posla za jednog covjeka. Da bi napravio isto to u asembleru na dovoljnom procesoru od 10 evra, potrebno ti je 5 ljudi koje ces placati 2 godine dok to zavrse.

Asembler ima svoje domete koje su u ovoj industriji odavno prevazidjeni. Otprilike ono sto je za nekog profesionalca u asembleru plafon, to je u visim programskim jezicima ostvarivo nekom amateru novajliji za isti, ako ne i kraci, utrosak vremena i para.
Ko nevjeruje neka proba u asembleru i C-u da napise program kojim ce pomocu misa da pomjera kursor na 128x64 LCD-u i nacrta piksel kad pritisne lijevo dugme, a obrise kad pritisne desno, pa nek javi sta je i za koliko vremena dobio u jednom i u drugom slucaju. Mogu da se kladim da ce 80% zagovornika asemblera dobiti manji i brzi kod u C-u nego u asembleru.
Sa porastom slozenosti projekta, tezina asemblerske realizacije i broj problema koje ona donosi, a pogotovo odrzavanje i debagovanje rastu eksponencijalnom progresijom.

U danasnje vreme, ne postoji nijedno opravdanje za iskljucivo koriscenje asemblera u ovom poslu kao poslu (ne kao hobiju) osim idiotluka.
[ bogdan.kecman @ 22.05.2010. 19:31 ] @
@odin, AMIN!

mala digresija .. ne znam da li sam spominjao .. ja sam svoju development karijeru zapoceo sa asm-om (prvo za 8086 pa za 68000 pa sa se vratio na 80286, 80386 ..) i moram priznati da sam povelike pare zaradio praveci mnogo brze poslovne aplikacije u istom tom asm-u koje su na tada uzasno skupim xt masinama a kasnije jos skupljim at masinama radile extra brzo ... klijenti bili zadovoljni, uzimali moje aplikacije za mnogo vece pare od onih aplikacija u kliperu koje su mogle to isto ali 10-100 puta sporije ... (nebitno sto sam ja trosio po 10 dana za obicnu kastomizaciju dok su kliperasi to zavrsavali za manje od 5 minuta - pare su, za to vreme, i za moje godine, bile ogromne) .. utom - dosao je 486 sa jos jednom extenzijom u asm-u koju je trebalo nauciti isprobati, implementirati (hvala intelu za backwards compatibility) ... i u tom, u pola tog "testiranja", imao sam cast i nadasve srecu da se upoznam sa tada malo poznatim srbinom - Zeljkom Krnetom (Pol Krneta) koji je tada radio u digital-u u australiji i bio jedan od evangelista alfa procesora - prvog 64bitnog procesora na trzistu.... posle nekoliko dana razgovora, on nije uspeo da me ubedi da sam debil sto i dalje radim u asm-u (iako znam i C i C++ i jos mnoge druge jezike) posto je to sporo!!! i da bi mi to dokazao, predlozio je da ja napisem proigram za neki random problem koji ce da nam zada covek koji nas je upoznao (V. Cosic) ... da ne tupim dalje, Zeljko je implenetirao njegovo resenje u C-u, ja sam implementirao moje resenje u asm-u, radili smo obojica na 386 masini, njegov c je izgenerisao 3 binaria, jedan je bio oko 30% brzi od mog asm-a ali jedno 25% veci, drugi je bio oko 10% brzi i 10% manji i treci je bio oko 1% sporiji je 70% manji .. ja sam moj pisao oko 4 dana (dan noc), on je svoj napisao za 30min. Onda je on rekao, "ajde sada da portujemo ovu aplikaciju na alfu!" i tog trenutka sam ja prestao da pisem programe u assembleru .. i dalje napisem tu i tamo po neki deo koda u asm-u ali ceo projekat da radim u asm-u - nema teorije, kompajleri su toliko napredovali i optimizacioni algoritmi su toliko napredovali da pisanje u asm-u toliko nema smisla vec jako dugo ...

tako da se nadovezem na odinov post ..

Citat:

Ko nevjeruje neka proba u asembleru i C-u da napise program kojim ce pomocu misa da pomjera kursor na 128x64 LCD-u i nacrta piksel kad pritisne lijevo dugme, a obrise kad pritisne desno, pa nek javi sta je i za koliko vremena dobio u jednom i u drugom slucaju. Mogu da se kladim da ce 80% zagovornika asemblera dobiti manji i brzi kod u C-u nego u asembleru.


neka napise to za PIC, a onda neka isportuje za ATMEL :D

ja sam gomilu svog koda za neku interpretaciju i parsiranje prebacio sa pic-a na atmel .. da sam to trebao da radim iz asm-a, samoubio bi se ..

[ rsinisa @ 22.05.2010. 19:58 ] @
Sve to stoji i ja nigde nisam rekao da se ceo program piše u ASM-u, pogotovo što sam rekao da ja koristim PBP u kombinaciji sa ASM-om. Ali i dalje tvrdim da jedino poznavanje ASM-a omogućava potpunu kontrolu nad kontrolerom jer ponekad u nekim delovima programa jednostavno programer mora da zna šta se TAČNO dešava i koliko traje neki deo programa. Pokušajte npr. da napišete kompletno u nekom višem prog. jeziku program koji na PIC-u koji radi na 10 MHz generiše TV test signal. Naravno, takve aplikacije su retke, ali ako naidje takav zahtev, onaj ko poznaje ASM je definitivno u prednosti.
Ja sam konkretno pisao softver za auto-alarm sa 16F628 i svakako ne bih mogao da ga realizujem da sam ga pisao u bilo čemu drugom sem u ASM-u. Izbor kontrolera je bio od strane naručioca, a obzirom na složenost programa, pitanje je da li bi mogao da se realizuje u bilo kom višem programskom jeziku. Dovoljno je samo reći da je u SVAKOM trenutku alaram morao da reaguje i prepozna komandu primljenu preko RF prijemnika od daljinca kombinovano sa raznim vremenskim zahtevima i sl, bez obzira šta se u tom trenutku dešava.
Da pomenem još i program za obrtomer koji sam pisao za PIC panel hardver koji jeste većim delom pisan u PBP-u, ali su kritične rutine pisane u ASM-u tako da sam uspeo da osvežavam LED displej u multipleksu, a da sam dobio rezoluciju od 1 o/min sve do približno 3000 o/min sa veoma velikom tačnošću.
Moj zaključak: pišite programe u višem programskom jeziku jer definitivno ubrzava posao, ali obavezno naučite ASM, može samo da koristi. O detaljnom poznavanju kontrolera koji koristite ne treba govoriti.

Pozdrav.
Sinisha


[ Odin D. @ 22.05.2010. 19:59 ] @
@Bogdane

Upravo tako...
Ljudi argumentuju asembler nekim parolama iz ranih 80-tih koje se valjda prenose "s koljena na koljeno" uz gusle, a koje nemaju nikakvog dodira sa danasnjim svijetom.

Kakva crna brzina i memorijsko zauzece i bolji "uvid" u sistem, to su nabuloze koje nemaju veze sa mozgom.
Vec neki znatan broj godina unazad industrija pravi jezgra koja su optimizovana za C-set instrukcija (hint: Cortex M3), a neki vec uveliko rade na jezgrima koja su hardverska realizacija Java Virtual Masnihe.

Jedini koji koriste asembler u poslu su pisci kompajlera. Niko drugi danas od toga ne moze zaraditi ni prebijene banke...

EDIT:

@rsinisa
Ne mora covjek da pise program u asembleru da bi znao da kad napise c = a + b; sta se fizicki desava u procesoru.
Uostalom, uzmes dokumentaciju kompajlera i vidis sve sta te zanima oko generisanog asemblerskog koda i njegovog trajanja.
Sta bi bilo da je zahtjeve tog projekta trebalo modifikovati, ili dodati neku novu funkcionalnost koju PIC ne moze da obezbedi, nego moras uzeti neko drugo jezgro. Ili jednostavno, nakon par godina doraditi uredjaj za nove zahtjeve i prilike? Sve sto si ranije radio pada u vodu...

Ako u danasnje vreme dodjes do tacke da ne mozes bez asemblera ili da ne mozes da uguras svoj kod u rasplozivu memoriju, u 99.9% slucajeva to znaci da si lose odabrao platformu ili nasao lose rjesenje problema.
Ne znam da danas postoji ijedan mikrokontroler koji nema bar 2 tajmera, pa da moras da sabiras duzinu trajanja instrukcija da bi generisao neke dogadjaje u odredjenim trenucima...

Jedna od najvecih zamki u koje neko u ovoj bransi moze da zapadne je to da se uhvati jedne platforme i kategoricki pronalazi razloge i opravdanja zasto ne bi koristio i druge. A najbolji put da upadne u tu jamu je da se drzi asemblera...





[Ovu poruku je menjao Odin D. dana 22.05.2010. u 21:19 GMT+1]
[ bogdan.kecman @ 22.05.2010. 20:12 ] @
bogami, i c kompajler se poodavno pise u c-u :D

sinisa, nisam ja rekao (a ni odin) da ti zagovaras asm ... e sad, to da je potrebno znanje asm-a, veliko je pitanje ... u nekom pic/atmel okruzenju tu i tamo je ponekad zgodno jednu inline funkciju nacukati u asm-u gde taj asm ima 5-6 naredbi i to je to .. sve preko toga znaci, po meni, da je arhitektura losa ... mnogo je bitnije za developera da zna da pravilno koristi hw na mcu kao sto su tajmeri i interapti (ovde je atmel sa "interrup on pin" u prednosti nad "nizim" pic uc-ovima ... mislim da je to jedina stvar koju atmel ima koja mi fali na ovim piconjama manjim od 24F)

ono sto je bitno, to je da se u doticnom C-u (ja iskreno ne vidim ni pascal i basic kao ozbiljne igrace tu, mada su za hobi odlicna resenja koja u mnogome ubrzavaju rad) stvarno radi kako treba, da se nauce i prihvate sve pre/post-procesorske "naredbe" kompajleru kako bi se istom omogucilo da maximalno optimizuje program a da ne promeni nacin njegovog rada ... (volatile - kao prvi i najjednostavniji primer)

sve u svemu .. za pic - 18F ili jaca serije i C18 odnosno C30 kompajler od microchipa, za atmel avrgcc, za ti msp430 mspgcc4... svi su dzaba, sve su odlicni kompajleri i svi su zasnovani na gcc-u.
[ rsinisa @ 22.05.2010. 20:23 ] @
Otišli smo predaleko, ovde se ipak radi o početniku koji je u nedoumici. Ja sam i napomenuo da oni koji hoće time da se bave profesionalno treba da koriste C. Meni lično PBP je sasvim dovoljan; da imam potrebe da pravim istu stvar sa različitim kontrolerima, svakako bih prešao na C.

Pozdrav.
Sinisha
[ Odin D. @ 22.05.2010. 20:37 ] @
Citat:
bogdan.kecman:bogami, i c kompajler se poodavno pise u c-u :D

He, he, ma naravno, nisam mislio da oni pisu kompajlere u asembleru, nego da im je potrebno da C-izraze prevode u glavi u asembler kao dio algoritma kompajlera koga prave.
[ strš @ 22.05.2010. 22:11 ] @
Pozdrav.
I dalje sam prijatno iznenađen koliko imate želje i entuzijazma da komentarišete celu priču.
Mislim da nema potrebe da polemišete koji program je bolji jer moja tema nije za to.
Moja pitanja nemaju trenutno dodira sa programom sa kojim ću da programiram mikrokontroler već da shvatim na koji način prići celoj priči i da svoje nedoumice kristališem u tačne definicije.To što spominjem assembler ili BASIC je samo kao primeri koji mi olakšava razumevanje programiranja.
Ako nije problem nastavio bih sa mojim početničkim pitanjima.Zahvaljujem.
Za sada ovako shvatam priču.:
1-odaberem sa kojim ću mikrokontrolerom da radim
2-odaberem u kom ću programu raditi(assembler,BASIC...)
3-"skinem" njegov datasheet
4-u tom datasheetu nađem set instrukcija
5-pišem program koristeći te set instrukcije u programu koji sam izabrao (ovu tačku ne znam ali za sada nije bitno)
6-snimim ga u hex sa asemblerom
7-upišem hex fajl u mikrokontroler sa nekim programatorom
Ovo je kostur cele proče ,po mom.Ako nije tako ispravite me.
Pod uslovom da je ovo gore tačno imam neka podpitanja ,a to su:
Ako pišem u assembleru (ovo je samo kao primer nije moj stav da je assembler najbolji) koji ima svoj set instrukcija a i mikrokontroler ima svoj set instrukcija ,koga da "slušam" tj. koje set instrukcije da pišem?
Mislim da kad shvatim rečenicu "a kod BASIC-a ne radiš sa adresama već sa promenljivima, tako da adrese nisu bitne" biće mi mnogo jasnije.
Moj problem je u tome što mikrokontroler ima svoj set instrukcija a i program u kom pišem ima isto ,kako onda te dve stvari da spojim.
Verovatno ovakvo moje razmišljanje nije tačno,verovatno i da sam pomešao žabe i babe ali nadam se da će te mi objasniti kako stvarno treba da gledam na ove stvari.
Dalje neću da zapitkujem dok ovo nerešim(nadam se uz vašu pomoć).
Još jednom Vas molim da nekomentarišete koji je program bolji ili gori ,jer mi na taj način ničim nepomažete već temu odvlačite na drugu stranu.
Unapred hvala.
[ Sepa011 @ 22.05.2010. 22:37 ] @
Nemoj da mesas 'babe' i 'zabe', odnosno ono sto ti nazivas setom instrukcija.

Mikrokontroler, bilo koji da je, ima svoj set instrukcija, barem ga mi tako nazivamo i predstavlja alfanumericku reprezentaciju binarnih instrukcija kojima mikrokontroler direktno operise. Ono sto stoji u datasheet-ovima samo nama, ljudima, daje smislene skracenice koje mi razumemo, a kompajler ih 'prevodi' u binarne brojeve.

Visi programski jezici su, nama ljudima, MNOGO razumljiviji od asemblerskih instrukcija i njihove 'naredbe' predstavljaju skupove instrukcija koje ce na odredjeni nacin kompajler pretvoriti u binarni kod, razumljiv mikrokontroleru. Ovi jezici se u sintaksi i naredbama/funkcijama medjusobno razlikuju tako da je na programeru da se opredeli za programski jezik koji mu najbolje 'lezi'. Takodje i medju visim programskim jezicima od iste vrste (BASIC, na primer) postoje razlike u nazivima naredbi/funkcija i u nacinu kako je sam kompajler organizovan, tj. da li je strukturni ili ne, da li su promenljive samo globalne ili mogu da se deklarisu i lokalne,...
[ bogdan.kecman @ 22.05.2010. 23:56 ] @
Citat:

1-odaberem sa kojim ću mikrokontrolerom da radim
2-odaberem u kom ću programu raditi(assembler,BASIC...)


yup. za pocetak ta dva .. samo mala ispravka
za pocetak - odaberes familiju mikrokontrolera (os microchip PIC, ili oces ATMEL atmega ili attyny ili oces TI MSP430 ili ...)
e biras "u kom programu" - vec u kom ces programskom jeziku pisati .. a programa ima mnogih, za mnogo sta. programski jezici koji su ti uglavnom u opticaju kod mcu-a su assembler, basic, pascal, c, c++
tu mozes i malo "blize" da se odredis posto imas razlicite basice, razlicite C-ove i slicno ... slicni su, ali nisu identicni

Citat:

3-"skinem" njegov datasheet


trcis pred rudu sad. kada se odlucis za familiju i programski jezik, onda odlucis STA ces da radis .. obicaj je da krenes sa nekim hello world programom za paljenje i gasenje ledara .. pa onda polako napred .. treba da odlucis TACNO KOJI mcu ces da koristis za startno igranje. Ja ti jaaaaaaako preporucujem da tu ne kreces sa nekim prehristovskim mcu-ovima kao sto je 16F84 koji se ne prave godinama i kostaju papreno bas zato sto su "nekad bili popularni" a sada ih odrzavaju ljudi koji se boje promena ... ako ces da se odlucis za PIC, moja ti je preporuka neki PIC18F2550. Ima odlican hardware u sebi, seriski port, usb .. ima sa njim da naucis cudo stvari. A posle, lako odes na microchip sajt i koristeci njihov alat odaberes za odredjeni projekat tacno odredjeni chip koji ima tacno hw koji tebi treba. Ovaj ti odlican za pocetak. Ako hoces ATMEL, ja ti preporucujem ATmega168 ili jos bolje ATmega328.

Citat:

4-u tom datasheetu nađem set instrukcija


u data sheet-u se nalazi mnooooooogo vise od seta instrukcija, nalazi se koji hardware se nalazi u mcu-u i kako se isti koristi (kako mu se pristupa, sta moze etc).

Citat:

5-pišem program koristeći te set instrukcije u programu koji sam izabrao (ovu tačku ne znam ali za sada nije bitno)


jok ba

pises program koristeci instrukcije programskog jezika koji si odabrao u tacki 2.

Citat:

6-snimim ga u hex sa asemblerom


jok. programski jezik po izboru ce tvoj program iskompajlirati i kao rezultat ti izgenerisati HEX (a i neke druge fajlove).

Citat:

7-upišem hex fajl u mikrokontroler sa nekim programatorom


yup. Za microchip PIC jaaaaaaaako savetujem nabavku PICKIT2 (original ili klon, klon imas u kitu u kelcu a i ovde na formumu imas ljude koji ti prodaju gotov istestiran klon, ne savetujem PICKIT3 osim ako neces odma da radis sa 32MX serijom posto je pickit2 mnoooooogo bolji) posto je za 10 klasa bolji od svih ostalih koji se nude posto pored samo programiranja nudi i mogucnost in circuit debagiranja, moze da se koristi kao 4kanalni logic analyzer, serial port decoder etc etc ... mnogo mocna alatka. Za ATMEL, ja licno koristim USBASP koji sam kupio ovde na forumu i sa kojim sam vrlo zadovoljan. Za TI MSP430 ja koristim OLIMEX programator i original TI-ov EZ430 .. olimex je brzi :) i laksi za koristenje.
[ bogdan.kecman @ 23.05.2010. 00:01 ] @
btw, ne volem da reklamiram nikoga al .. pogledaj sajt www.mikroe.com .. momci imaju jednu od najboljih platformi za ucenje i testiranje za pocetnike. EasyPIC6, EasyAVR6, EasyARM ... mnooooooogo dobri alati a nisu mnogo skupi. Dodatno oni prave odlican C kompajler (koji na zalost nije dzaba a nije ni 1/1 kompatibilan sa microchip alatima u pic varijanti) koji je extra lak za koristenje, ima biblioteke za cudo i karate stvari... momci prodaju dodatne "extension" plocice sa svim i svacim (rfid citac, lcd ovakav, onakav, gsm, gps, accelerometar ... i cudo toga) i za sve dobijes primer u c-u i basic-u kako da korists ... dakle za pocetnike - stvarno mnogo mocno .. malo kasnije sve to prevazidjes posto napravis svoj dev kit sam prilicno lagano ali .. realno, ako si ozbiljan da oces da ucis, i imas da ulozis u to, ja mislim da ti je to najbrzi i najbolji put
[ Odin D. @ 23.05.2010. 00:09 ] @
@strs
Moras malo prvo poraditi na terminologiji, da umjesto odgovora na svoja pitanja ne bi uvijek dobijao "ispravke" pitanja.

1. Programiranje u Asembleru je obicno redjanje instrukcija koje postoje za neki mikrokonotroler. To su iste one instrukcije tebi poznate kao "set instrukcija" odredjenog mikrokontrolera, a nalazis ih u datasheetu. Svaka od tih instrukcija obicno predstavlja neku primitivnu operaciju koju je CPU mikrokontrolera sposoban da izvrsi; npr. premjesti podatak sa jedne lokacije na drugu, uporedi dva broja i tome slicno.
Ako hoces da saberes dva broja i rezultat sacuvas negdje u memoriji treba sam da tu operaciju predstavis pomocu tih jednostavnih operacija, npr:
Code:

1. ucitaj prvi broj iz memorije na lokaciji x u registar 1
2. ucitaj drugi broj iz memorije na lokaciji y u registar 2
3. saberi ono sto se nalazi u registrima 1 i 2 (rezultat ce npr. otici u registar zvani akumulator)
4. premjesti ono sto se nalazi u akumulatoru u memoriju na lokaciju z

Na isti nacin postupas i za bilo koju drugu funkcionalnost koja ti je potrebna - moras da sklopis niz primitivnih operacija (instrukcija) na takav nacin da odrade ono nesto slozenije sto ti treba.

2. Basic, C,... nisu programi. To su programski jezici. Pomocu programskog jezika pises programe. Basic i C su "visi" programski jezici u odnosu na asemblerske instrukcije zato sto na "visem" nivou apstrakcije mozes da predstavljas operacije. Konkretno, u prethodnom slucaju sabiranja dva broja gdje si u asembleru morao da koristis 4 jednostavne operacije i da vodis racuna o memorijskim lokacijama, u visem programskom jeziku je dovoljno samo da napises:
Code:

z = x + y;

Kompajler je program koji ce od ove jedne naredbe u visem programskom jeziku da napravi ona cetiri koraka iz tacke 1, cime tebe oslobadja da se bakces tim detaljima i omogucava ti da se koncentrises na sustinu problema, a ne na detalje oko konstrukcije procesora. Znaci kompajler neki slozeniji izraz iz viseg programskog jezika "razbije" na niz jednostavnih asemblerskih instrukcija koje procesor moze fizicki da izvrsava.
Ako pises direktno u asembleru, kompajliranje prakticno i ne postoji, posto si vec sam napisao program kao niz tih elementarnih operacija.

3. Asembler nije univerzalni jezik, niti je jezik u smislu u kom su to Basic i C. Programirati u asembleru jednostavno znaci pisati program koristeci se jedino setom instrukcija koje dati mikrokontroler posjedujue, a posto svaki ima svoj set instrukcija to je i programiranje u asembleru razlicito za svaki od njih. Neki procesori imaju 30-tak asemblerskih instrukcija, a neki i 120 i vise.

4. Da bi mogao da obavis sve to oko pisanja programa za mikrokontrolere potreban ti je u najmanju ruku neki text editor u kom ces otkucati svoj 'program', zatim kompajler koji ce da ga razbije na niz asemblerskih instrukcija koristeci set instrukcija tog konkretnog procesora i da napravi '.hex' fajl koji se treba upisati u programsku memoriju mikrokontrolera, jedna sprava koja se zove programator pomocu koje ces fizicki '.hex' fajl prebaciti iz PC-a u mikrokontroler i naravno program koji upravlja tim programatorom i procesom upisa '.hex' fajla u mikrokontroler.
Za sva ta tri koraka (kucanje programa, kompajliranje i upis u mikrokontroler) mozes koristiti medjusobno nezavisne programe, ali je uobicajenije u danasnje vreme da su sva tri objedinjena u jednu cjelinu koja se naziva IDE (Integrated Development Enviroment) iliti integrisano razvojno okruzenje.
To su npr. MPLAB, AVRstudio, IAR, Keil itd....
Sto se tice one sprave - programatora - svaka familija mikrokontrolera ima svoj nacin kako se to programiranje radi, pa tako imas i razlicite programatore za svaku od njih. Nema univerzalnih programatora.

Citat:
Ako pišem u assembleru (ovo je samo kao primer nije moj stav da je assembler najbolji) koji ima svoj set instrukcija a i mikrokontroler ima svoj set instrukcija ,koga da "slušam" tj. koje set instrukcije da pišem?

Kao sto ti rekoh gore, pisati u asembleru znaci koristiti set instrukcija datog mikrokontrolera - to ti je isto. Asembler nekog mikrokontrolera nije nista drugo nego sinonim za njegov set instrukcija. To nisu dvije razlicite stvari.

Pisanje u C ili Basicu je vec druga stvar. Oni su univerzalni i kod njih je sabiranje dva broja uvijek isto, bez obzira za koji mikrokontroler ti pisao program:
Code:

c = a + b;

Medjutim kompajleri se razlikuju. Kompajler za PIC ce ovaj prethodni C-izraz razbiti na neki niz asemblerskih instrukcija PIC mikrokontrolera (kao npr. na ona cetiri koraka iz tacke 1.), a kompajler za MSP430 ce taj isti izraz razbiti na niz asemblerskih instrukcija koje ima MSP430 kontroler ( a to za razliku od PIC-a mogu biti sasvim neke druge instrukcije, a ne mora ih biti 4, moze ih biti i samo dvije ili npr. 6, zavisi vec od toga kakva je konstrukcija jezgra tog mikrokontrolera).
Sustina je u tome da ti pises " c = a + b; " na kojem god mikrokontroleru da radis, a kompajler za taj mikrokontroler ce da se brine o tome kako ce pomocu seta asemblerskih instrukcija natjerati taj mikrokontroler da sabere a i b i rezultat upise u c. Kompajler to sve radi sam, tako da ti ne moras da brines o tome.
Sustina svega ovoga je u tome da se ti bavis svojim problemom koji hoces pomocu mikrokontrolera da rjesis, a da ne gubis previse vremena i energije na detalje konstrukcije koji tebi nisu bitne.

Razlika izmedju viseg programskog jezika i asemblera je kao npr. da imas dva segrta, od kojih jednom mozes da kazes:
a) Idi zakucaj onaj ekser sto je ispao iz tarabe;
dok ovom drugom moras ovako:
b) Ustani, okreni se 75 stepeni u desno, kreni napred,..., stani, ispruzi ruku, otvori saku, spusti saku na cekic, uhvati cekic, okreni se 90 stepeni lijevo, kreni... stani, cucni, ispruzi lijevu saku iznad eksera, podigni ekser, namjesti ekser na tarabu, zategni desnu ruku unazad, zamahni cekicem.....

To sve radi i onaj prvi, samo ne moras ti da mu objasnjavas svaki korak, a to sto ne moras da mu sve crtas ne znaci da nemas pojma "sta se stvarno desava", sto je cest "argument" zagovornika asemblera. Pa nisi debil pa da ne znas kroz koje se faze prolazi da bi se zakucao ekser. Ali ono sto moze da te napravi debilom je da od ta dva pomocnika ti odaberes pomocnika b).

Iz ovih tvojih pitanja ja sam stekao neku sliku o tvom trenutnom nivou i ako ces mene da poslusas, ostavi na par mjeseci mikrokontrolere po strani i nauci neke osnove programiranja i racunarstva uopste.
Ja bih ti predlozio C za start (iako nije najlaksi za startovanje), ali s obzirom da su cilj mikrokontroleri nadoknadices taj nesto sporiji start kasnije jer kad krenes sa mikrokontrolerima neces morati tada da ga ucis.
[ strš @ 23.05.2010. 12:48 ] @
Hvala vam na konkretnim odgovorima.Sada mi je dosta jasnije.
Kako shvatam prvo treba da naučim neki programski jezik ,pa tek onda da se prihvatim mikrokontrolera i njihovom programiranju?
Ako je ovo tačno mogu li usput još malo da vas smaram sa pitanjima?Mogu!?Hvala.
Ako nabavim knjigu programiranje u C-u (programski jezik dat kao primer) da li moram da napomenem da mi treba za mikrokontrolere a ne za računare,ili je to isto(glupo pitanje?)? Tj. da li je osnova programiranja ista, i kod mikrokontroler i kod računara, samo se razlikuju neki detalji?
Da li znači ako pišem u neko od "viših" programskih jezika nemoram da znam njegov(mikrokontrolerov) set instrukcija jer će taj posao da obavi kompajler?
Moje je "samo" da znam koje mogućnosti ima mikrokontroler za koji se opredelim?Kad smo kod toga šta se gleda kod mikrokontrolera u zavisnosti od programa koji ću da upišem u njega,tj.imam program i kako da se opredelim koji mikrokontroler uzeti za rad?Ili se uzme jedan sa "povećim" kapacitetima i upisujem programe u njega ,iako sa tim programom nekoristiš ni 10 posto njegovih mogućnosti?Sa ovim pitanjem netražim da mi napišete određeni mikrokontroler već uopšteno.Možda sam na ova pitanja dobio odgovor ,ali sa ovim pitanjima želim da potvrdim dali sam u pravu ili grešim.
Krenuću u učenje nekog programskog jezika i nadam se da ću moći kod Vas potražiti pomoć.
Još jednom hvala vam na detaljnim odgovorima.


[ Odin D. @ 23.05.2010. 13:31 ] @
C je isti i za PC i za mikrokontrolere, samo se donekle razlikuje nacin na koji ga upotrebljavas u jednom i u drugom slucaju. Ali to ne treba sad da te zanima.

Pronjuskaj malo po internetu sta se pocetnicima preporucuje za ucenje programiranja pa nabavi nesto od toga.
Obrati paznju da nije dovoljno da naucis samo neki jezik vec i par drugih osnovnih stvari: o algoritmima, podacima, nesto malo o konstrukciji i radu racunara i tako to...
Takodje moras znati da ce neke kockice poceti da se slazu tek malo kasnije i da se neke nece moci sloziti dok ne "nabavis" neke druge. Tako da ne zastajkujes svaki cas oko svake sitnice nego citaj dalje... sto vise citati....

[ korak @ 23.05.2010. 15:51 ] @
Interesantna tema, a ja dugo nisam bio na ES.

Sve sto je receno je tacno, sa tim sto je neko potencirao jednu a drugi drugu stvar. Moje misljanje, sobzirom da su predmet mikrokontroleri, je:

1. Asembler je najsnazniji programski jezik za programiranje mikrokontrolera;
2. Asembler omogucuje potpunu kontrolu svih resursa mikrokontrolera po zelji programera;
3. Asembler generise najefikasniji kod i po duzini i po vremenu izvrsenja.

ali:

1. Poznato je da je otprilike potrebno isto vreme po programskoj liniji pri pisanju softvera, pa ispada da je mnogo krace vreme potrebno da se napise program na visem programskom jeziku nego na asembleru.
2. Visi programski jezici su standardizovani tako da imaju skup pravila koji ne zavisi od koriscenog mikrokontroler, pa su zato prenosivi, odnosno isti program moze da se izvrsava na bilo kom mikrokontroleru.

ipak teraba znati:

1. Da bi efikasno pisali program na visem programskom jeziku trebate poznavati sve unutrasnje module MCU-a. Zatim, bez obzira na osobinu prenosivosti, uvek se program mora u nekoj sekciji za definicije ili deklaracije podesiti za dati MCU.
2. Visi programski jezici nude funkcije koje inicijalizuju i upravljaju nekim od modula MCU-a. Ovo sugerise da nije potrebno poznavanje takvog modula, sto je donekle tacno. Medjutim, moze se desiti da su funkcije takve da vam bas ne odgovaraju, i onda je resenje da napisete svoje na asembleru (svaki visi programski jezik dozvoljava pisanje na asembleru). Ovog sam se nagledao u mnogim besplatnim visim programskim jezicima.

Zakljucio bih sa:

1. Bez obzira na izabrani visi programski jezik treba poznavati MCU sa kojim radite, a to upoznavanje se najlakse i najbrze ostvaruje na asembleru, bilo da koristite asemblerski kompajler, bilo da u visem programskom jeziku koristite asemblerske instrukcije.
2. Izaberite obavezno C (taj odvratni jezik apsolutno dominira). Ako ste u mogucnosti neka to bude neka profesionalna verzija u rangu sa Keilom (kompajleri su im bez obzira na MCU vrlo korektni i generisu solidan kod za jedan visi programski jezik). Od Freescale, koji takodje ima odlicne kompajlere, necete naci nista besplatno (a kosta od 3000$ do 5000$) sem demo verzije, koja je kompletna, ali generise kod do 4KB duzine.
3. Sa svim kompajlerima visih programskih jezika postoji problem apdejtovanja za novi MCU. Ako ste ga legalno nabavili nema problema, ali ako niste onda ili necete koristiti novi MCU, ili ce te morati da se dovijate kako da naterate vasu verziju prevodioca da uradi posao kako zelite.
4. Budite spremni na iznenadjenja, bar u pocetku, sa porukama o greskama koje ispisuje C kompajler. Cesto se desava da nisu tamo gde ukazuje kompajler vec na drugom mestu. Ovo se narocito odnosi na greske koje otkriva linker. Kasnije sa iskustvom ovi problemi ce biti lako resivi.
5. C ne spada u vise programske jezike, vec u jezike srednjeg nivoa, pa je bas zato pogodam za programiranje mikrokontrolera. Ali to znaci da ume da sabira "babe i zabe" i da ne vodi racuna o prekoracenju (bas kao i asembler). Ime varijable je uvek varijabla, ali ime niza je pointer na niz, i na to se morati naviknuti. I nije samo ovo, ima jos drugih nedoslednosti na koje se programer mora privici.

Cela ova prica je proistekla iz teznje da se sa sto manje rada (krace vreme) zaradi vise para. Hocu reci ni C nije idealan, ali donosi pare.

Ako se neko pita kako ja radim, pa mucim se kao i svi drugi. Nemam potrbu za osobinom prenosivosti jer radim sa MC9S08 familijom koja je danas u vrhu 8-o bitnih mikrokontrolera, jeftini su, ima ih za sve moguce aplikacije, ali C kompajler za njega kosta ko sirce. Zato sam napravio sopstveno razvojno okruzenje koje je asemblerski kompajler, takav da se najlakse moze opisati ako kazem da je to PASCAL koji umesto PASCAL iskaza ima asemblerske iskaze. Imam vrlo mocne makroe i module kao u DELPHI-ju. Primera radi za manje od mesec dana sam razvo USB na PC HID drajver, i isto toliko vremena je trebalo za CAN komunikaciju. Nesto od ovoga moze se skinuti kao gotovo resenje za neke druge mikrokontroler, ali obe komunikacije sam smestio u module, i mogu i da zaboravim kako sam to radio, a da ih i dalje koristim. Dakle, dosta mucno ali nemam izbora.
[ vlada_vlada @ 23.05.2010. 16:54 ] @
Strs, domacine - isprsi se nauci i asembler i BASIC i C :)

Nije to tako strasno.. ti ces nauciti sve tehnologije koje su pomenuli, dok se oni sloze sta je "najkorisnije pocetniku".

Nema 'silver bullet' jezika. Ako ces da ti ovo bude zanat, trebace ti sve.
[ strš @ 23.05.2010. 17:56 ] @
Hvala na savetima.
Drži me entuzijazam da savladam (za mene) ovu tešku problematiku ali ne toliko da savladam baš sve programske jezike.Ja želim da budem jedan prosečan "majstor" koji zna i da programira mikrokontrolere.
Svi ovi odgovori su mi dosta pomogli.
Pošto prihvatam vaš savet da prvo malo dopunim svoje opšte znanje vezano za ovu temu ,smem li da Vas pitam šta mi svetujete od literature ali naglašavam za početnike.Pogledaću i na net-u.
Stvarno ste super!
[ rsinisa @ 23.05.2010. 18:11 ] @
Ja sam pre par godina manje-više prekucao tekst Voje Antonića o 16F84 i postavio na sajt. Pogledaj informativno, ali ne preporučujem da uzmeš 16F84 za probu. Ili uzmi 16F628 ili, kao što neko reče nešto iz 18F serije. Mislim, sad opet svako može da vuče na svoju stranu ;), ali šta god da odabereš nećeš mnogo da pogrešiš, bitno je da savladaš princip, a posle za konkretnu aplikaciju biraš kontroler. Ja sam učio na osnovu upravo tih Vojinih tekstova, a posle sam za druge kontrolere pogledao ono što mi je bilo bitno za neki drugi kontroler.

Sajt je http://sinel.freehostia.com/pic/pic_kontroleri.htm

Pozdrav.
Sinisha

P.S. Ako se u tvom browseru preklapaju tabele i tekst, probaj da povećaš veličinu slova - to je moj prvi sajt i tada još nisam ništa znao o pravljenju sajtova pa je zato došlo do preklapanja.
[ strš @ 23.05.2010. 20:45 ] @
Našao sam jedan sajt sa tutorialim http://tutoriali.org .Na prvi pogled je ok.
Ako može samo da mi odgovorite na ostatak pitanja iz mog predprošlog posta.
Pozdrav.
[ Odin D. @ 23.05.2010. 22:34 ] @
Ne moze niko da zna kakva ce 'metodika' prezentovanja te problematike tebi da odgovara.
Na netu mozes pronaci recenzije i misljenja o pojedinim knjigama i tutorijalima i to je sve sto ti je potrebno.
Bitno je da je materijal pouzdan, provjeren i tacan, a da li ce da ti odgovara to mozes znati tek kad pocnes da ga koristis.
Ako ti ne odgovara, batali ga i probaj sa drugim, trecim.....

Po svoj prilici, kad dodjes do mikrokontrolera moraces koristiti vise "izvora" odjednom.
A za ovaj prvi korak - o programiranju uopste - probaj da nadjes nesto od onih izdanja tipa "... za 21 dan" ili "...za neupucene" i tome slicno.
Nema potrebe da ti pocetak bude stresan.
[ bogdan.kecman @ 23.05.2010. 23:19 ] @
vezano za asm

odlican tutorijal kroz primere - http://www.winpicprog.co.uk/pic_tutorial.htm
odlicna knjitga (malo bajata posto je vezana za 84ku ali): Microcontroller Programming The Microchip PIC

za C -
odlicna: Programming Microcontrollers in C (Second Edition), Ted Van Sickle, ISBN: 1-878707-57-4
malo bajata: Exploring C for microcontrollers (a hands on approach), ISBN 978-1-4020-6066-3 (HB), ISBN 978-1-4020-6067-0 (e-book)

isto tako mozes da skines sa mikroe.com sajta njihov mikroC (demo verzija sa 2k limitom koji ti je za ucenje savrseno dovoljan) i oshonsoft simulator za pic .. u mikroC napravis hex a u oshonsoft-u ga istestiras (oshonsoft je domaca firma i autor daje veliki popust domacim kupcima). Uz mikroE ces dobiti gomilu primera

ja sam krenuo da prevodim nigelove tutorijale za asm u C ( http://elco.crsndoo.com/wordpress/tag/nigel-goodwin/ ) ali nisam daleko stigao ..


Korak, za ozbiljan rad neophodno je znati asm (posto ako ne znas asm tesko da mozes uopste da koncipiras program pravilno), a sto se tice toga da "asm pravi bolji kod", probaj, ako nista a ono za tvoju dusu, ovo sto je Odin rekao, napravi u asm-u i u c-u program koji ce da seta kursor misa po lcd-u, na levi klik setujes pixel, na desni klik resetujes pixel .. i onda uporedi generisani hex iz asm-a i c-a i ako ti je c kompajler iole valjan, C hex ce da bude manji ili brzi, zavisi koju optimizaciju upalis, a mozda i manji i brzi.

to sto si izgubio mesec dana da napravis usb drajver meni znaci da tvojih mesec dana ne kosta puno. Ako taj modul kosta gotov 200E (a ne kosta vise, ima ga i za dzabe) ti si rekao da tvojih mesec dana rada ne vredi ni 200E - ako je to tacno onda je mozda opravdano to sto si mesec dana potrosio da napravis nesto sto ima da se uzme gotovo za te pare. Ako si to radio da bi nesto "naucio" to je druga prica, ali ako govorimo o razvoju software-a za klijenta, onda pricamo o tome koliko kosta inzenjer sat / dan / mesec i ti su upravo rekao da tvoj inzenjer mesec kosta 200E. Pritom, veliko je pitanje
1. da li je taj tvoj modul dovoljno istestiran?
2. da li radi u svakoj situaciji (usb 1.0, usb 1.1, usb 1.2, usb 2.0, sa i bez obavezne prijave potrosnje, sa dinamickim id-om, sa razlicitim host os-om)?
3. da li je uopste manji ili brzi od gotovog resenja?

meni je trebalo da okacim neki logger na usb, ja sam skino library (za 5min) i za manje od 30 min okacio svoj projekat na usb kao hid, a onda iz zezanja probao i namestio u narednih 30min da radi kao serial device i kao mass storage device ... 60min vs 30 dana .. o CAN-u necu ni da pricam ... "tu ima nesto da se implementira" :) ...

dakle, da se ne lazemo, za ozbiljan rad, mora da se ima neko znanje asm-a, ali praviti projekat u asm-u, sorry, upravo tvoj primer da si nesto sto se radi 30min radio 30dana potvrdjuje koliko je asm "efikasan"
[ _str_ @ 24.05.2010. 12:17 ] @
bogdan.kecman, Odin D.
strsh je hteo da nauci koristiti mikrokontrolere, pri tom ne poznaje hardver nitijednog kontrolera. Bar sam to tako shvatio...

Prvo bi trebao skinuti pdf od najmanjeg modela neke serije npr. 16f84, ostampati na papir i krenuti citati od strane 1A i tako dok se stranice ne pohabaju. Tu je obisan raspored hardvera i kako se aktiviraju pojedini 'sklopovi' pomocu asemblera.
Kada samostalno napises program da se LED pali i gasi u asembleru onda si spreman za bilo koji jezik i hardver. Od neceg se mora krenuti pa zasto to ne bi bilo A?!
[ bogdan.kecman @ 24.05.2010. 12:36 ] @
_str_, sorry ali ne slazem se otprilike ni sa jednom stavkom koju si napisao ...

- citanje data sheet-a bez ideje o programiranju mu nece pomoci nista
- citanje data sheet-a o 16F84 je pogresan pocetak, to je kao da te neko tera da jases konja da bi te pripremio za ucenje voznje avionom
- paljenje ledare ce da nadje u svakoj knjizi za mikrokontrolere kao prvi primer za bilo koji jezik ... nacice ga uz svaki kompajler kao prvi primer ... nacice ga u helpu svakog kompajlera ..

dakle ucenje iz datasheet-a je pogresan i jako spor nacin, to sto smo mi morali da ucimo iz datasheet-a pre 15 godina ne mora da znaci da danas u doba brzog interneta treba stvari da se rade kao pre 15 godina (i koristi isti %$@%_# 16F84 kao pre 15 godina) ... neke stvari stvarno treba prevazici i dozvoliti im da umru
[ strš @ 24.05.2010. 15:39 ] @
Pozdrav.
Nema potrebe da se raspravljate šta je bolje ili gore.
Tačno je da ne poznajem hardver ni jednog kontrolera i da cela ova priča je ustvari stvaranje početne slike kako osnovne stvari funkionišu.Dobar je predlog da sam sebi odaberem literaturu koju ću lakše da "svarim" , tako da sam već počeo sa traženjem i čitanjem literature.Sad je na meni koliko ću biti uporan da naučim o programiranju.
Vaši saveti i objašnjenja su mi od velike pomoći i na tome se zahvaljujem od srca.Možda je bezobrazno ali ako može odgovor na pitanja iz predhodnog posta a ono glasi:
"Da li znači ako pišem u neko od "viših" programskih jezika nemoram da znam njegov(mikrokontrolerov) set instrukcija jer će taj posao da obavi kompajler?
Moje je "samo" da znam koje mogućnosti ima mikrokontroler za koji se opredelim?Kad smo kod toga šta se gleda kod mikrokontrolera u zavisnosti od programa koji ću da upišem u njega,tj.imam program i kako da se opredelim koji mikrokontroler uzeti za rad?Ili se uzme jedan sa "povećim" kapacitetima i upisujem programe u njega ,iako sa tim programom nekoristiš ni 10 posto njegovih mogućnosti?Sa ovim pitanjem netražim da mi napišete određeni mikrokontroler već uopšteno.Možda sam na ova pitanja dobio odgovor ,ali sa ovim pitanjima želim da potvrdim dali sam u pravu ili grešim."
Unapred hvala.
[ bogdan.kecman @ 24.05.2010. 16:14 ] @
Citat:
strš
Nema potrebe da se raspravljate šta je bolje ili gore.


nema rasprave :D .. rasprava je ono "sta se duvas $#_(&& emoj ti ja dodjem tamo da te naucim $#@& kad ti ..." ... i "moj tata ima vecu motku" ....

ovo je samo razmena misljenja :D

Citat:

"Da li znači ako pišem u neko od "viših" programskih jezika nemoram da znam njegov(mikrokontrolerov) set instrukcija jer će taj posao da obavi kompajler?


da ali ne :)

sta je fora, ne moras da znas koje registre ima, ne moras da znas da li se prvo stavlja source pa destination ili obrnuto, koji adresni mod mozes da koristis kada i slicno ... ali moras da znas svaki port u tom mikrokontroleru i sta ce se desiti kada sta upises u njega. Dakle, A=B+C ce raditi uvek i na svakom isto, ali inicijalizacija serijskog porta na 19200 ce retko ici kao usart_init(19200); a mnogo cesce ce zahtevati malo direktnog prckanja po hw-u mcu-a

Citat:

Moje je "samo" da znam koje mogućnosti ima mikrokontroler za koji se opredelim? Kad smo kod toga šta se gleda kod mikrokontrolera u zavisnosti od programa koji ću da upišem u njega,tj.imam program i kako da se opredelim koji mikrokontroler uzeti za rad?Ili se uzme jedan sa "povećim" kapacitetima i upisujem programe u njega ,iako sa tim programom nekoristiš ni 10 posto njegovih mogućnosti?Sa ovim pitanjem netražim da mi napišete određeni mikrokontroler već uopšteno.Možda sam na ova pitanja dobio odgovor ,ali sa ovim pitanjima želim da potvrdim dali sam u pravu ili grešim."


nemoj da se vezujes za PIC iako ti ja mozda dajem vise linkova za PIC nego za neke druge, to je cisto zato sto su mi pri ruci, ne zato sto je nesto "bolje" ... ali evo ti primer:
http://www.microchip.com/maps/main.aspx

odes tu, odaberes mikrokontroleri i videces spisak razlicitih stvari koje jedan mcu ima ... tu odaberes sta ti treba i on ce ti dati spisak picova koji to mogu da ponude ...
ako razmislis malo o tome .. videces da se ne bira mikrokontroler prema "programu" vec se bira prema "nameni" .. ako ces da ga koristis da pricas sa 2 masine preko 2 seriska porta, zelis neki kontroler sa 2 usarta ... ako hoces da direktno kontrolises 20 ulaza i izlaza, bitno ti je da ima 20 io pinova .. ako oces da citas vrednost sa 10 analognih ulaza - treba ti neki sa 10 ADC -ova .. ako ti je potreban jedan ali "tacniji" analogni "citac" onda potrazis neki sa 12 ili 16 bitnim adc-om ... etc etc .. dakle mcu biras kao "onaj koji ima hw koji tebi treba" ...
[ korak @ 24.05.2010. 16:39 ] @
@bogdan.kecman

Da ti odgovorim:

1. Radim sa njim godinu dana bez problema, ali mislim da nikada nije dosta testiranja.

2. Radi sa USB 1.0 i USB 2.0

3. Kod je duzine 2KB, i u odnosu na neke druge programe koji koriste HID drajver nisam primetio da radi sporije.

Dakle, nisam ustedeo pare, ali sam naucio kako da napravim da moj MCU, koji ima USB, moze da komunicira koristeci njega. Mogu da podesavam velicinu paketa kako mi kad odgovara, kada koristim neki drugi MCU koji ima statusno-kontrolne registre na drugim adresama ili ima drukciji raspored bitova, i to mogu lako da podesim.

Inace, teoretski visi programski jezik generise uvek manje efikasan kod i granica efikasnosti je efikasnost asemblera. Pa na kraju krajeva i visi programski jezik generise asemblerske naredbe.

Svojevremeno sam pravio test: 3DES algoritam na C-u za Keil, CodeWarrior i asembler. Asemblerski tekst sam napravio "prepisujuci" C izvorni tekst za 30 min. Ovaj algoritam nije trivijalan, pretpostavljam da ti je poznat, duzine je oko 3KB u asembleru sa nesto manje od 1KB tabela. Rezultat je sledeci: C kompajleri su generisali duzi kod za 20% do 30% kada su bili optimizovani na duzinu koda, a vreme izvrsenja je bilo oko 50% duze, kada su C kompajleri bili optimizovani na brzinu izvrsavanja.

Imaj u vidu da radim sa MC9S08 i da sve sto bi kupio to je vezano za CodeWarrior C kompajler koji nije besplatan i kosta od 3000$ do 5000$. Nadam se da me razumes.

Pozdrav.
[ bogdan.kecman @ 24.05.2010. 16:49 ] @
korak, ne sumnjam da je taj modul ispao odlicno ... ali ti si, realno, za to vreme i taj trud i taj nivo kompleksnosti mogao da zaradis za isti taj codewarrior...

sto se tice 3des-a nije bas dobar primer za poredjenje asm-a i visih programskih jezika .. a sto se tice optimizacije, bas je suprotno, ako pogledas kako rade neke od optimizacija danas, ti samo teoretski to mozes da odradis rucno a i to samo na nivou par kilobajta i 8 bitnih mcu-a (i ja rekoh da sam zaradjivao super kintu pisuci kompleksne aplikacije na 8086 .. ubedili su me da predjem na C tek tamo na 386 masini) .. ali vec kada se predje na 16 bitni rad i vece programe, asm postaje bezpredmetan ... u varijanti jednog osmobitnog mcu-a sa par kb rama ... asm je ok .. ali to je tesko "generalni slucaj"

no, odosmo predaleko od osnovne teme ...
[ Odin D. @ 24.05.2010. 17:55 ] @
Citat:
korak: Inace, teoretski visi programski jezik generise uvek manje efikasan kod i granica efikasnosti je efikasnost asemblera. Pa na kraju krajeva i visi programski jezik generise asemblerske naredbe.


Mozda teoretski, ali sumnjam i da je teoretski.
Analogija ti je ista kao i kad bi rekao da kompjuter teoretski moze da igra sah samo onoliko dobro koliko i covjek koji ga je programirao, mejdjutim svi znamo da to nije tako.
Kompajliranje nije nikakvo vece mozganje od igranja saha, cak naprotiv. Imas odredjen broj nacina na koji se nesto moze uraditi, iteriras xyz-puta kroz moguce kombinacije i odaberes onu koja ti je najpodesnija. To isto radi i covjek, samo milion puta sporije, jednako kao i u sahu.
Mozda na planeti ima 1-2 covjeka koji ce pobijediti neki osrednji sahovski kompjuter, ali to uopste ne znaci da ce ga svako pobijediti, isto kao sto ni svako ne moze napisati optimalniji kod od prosjecno dobrog kompajlera. Pisanje koda u asembleru, samo po sebi, uopste ne garantuje da ce to sto dobijes biti brze ili krace od kompajlerski generisanog.
Nema teorije da pobijedis moderne C-kompajlere u optimizaciji koda, osim u neravnopravnim uslovima kada ti je za slucaj za C-om dato pola sata na raspolaganju, a za asembler mjesec dana. A i to samo do odredjenog nivoa netrivijalnosti, jer preko nekog nivoa (koji nije toliko visoko) ne bi ti pomoglo da imas 10 godina na raspolaganju, jer bi na kraju prve godine poceo da zaboravljas od cega si poceo...
Ne radi se tu o poredjenju performansi izmedju asemblera i C-ovog kompajlera, jer asembler i nema nikakve performanse - iza asemblera stoji covjek, a ne kompajler, prema tome to nije C versus asembler nego masina vs ljudski mozak u primitvnoj disciplini kombinavanja i permutovanja, a zna se koliko kompjuteru treba da isproba 3 miliona kombinacija, a koliko covjeku.
Tvrditi da je asembler bolji od C-a nije nista drugo nego tvrditi da ce svaki covjek napisati bolji kod od kompajlera, sto nema veze sa zivotom, a pogotovo nema veze sa mozgom kad se radi o pocetnicima, odnosno, cak stavise, o bilo kome ko nije izuzetno uverziran profesionalac.

Dalje, optimalniji rucni asemblerski kod od C-ovog kompajlera mozes da dobijes ako se namjerno trudis da pises neoptimizovani kod u C-u. Ako se ni u C-u ne raspistoljujes sa megalomanskim preorganizovanjem koda u nebrojne layere i medjuslojeve i module i funkcije koje pozivaju funkcije koje pozivaju funkcije koje pozivaju..... onda ce ti i najbudjaviji besplatni C-kompajler izgenerisati asemblerski listing ravan tvom koga si rucno napisao.
Drugim rjecima, nije zabranjeno misliti ni kad se pise kod u C-u, i nije zabranjeno optimizovati C-source kod.

Jedno pitanje:
Sta bi ti radio da ti je neko, prije nego si ti napravio taj usb driver, dosao i zatrazio da mu napravis nesto sto ima usb, can i profibus, a pri tom treba nesto i da radi, recimo loguje saobracaj sa tih magistrala na SD-kartu ili hard disk, prikazuje to na 480x320 grafickom displeju i moze da se upravlja preko touchscreen-a?
Eto to je jedan onako, straight-through uredjaj, pravolinijski, nema sta mnogo da se misli niti kakvih silnih mozganja i nepoznanica.
Koliko mislis da bi ti trebalo za to u asembleru?

[ strš @ 24.05.2010. 21:09 ] @
Pozdrav.
Evo mene, samo da kažem za sada više nemam pitanja ali ako imate sugestije ili smernice slobodno upišite.
Možete da nastavite sa razmenom mišljenja.
Još jednom hvala i najbolji ste!
[ vlada_vlada @ 26.05.2010. 20:44 ] @
Citat:
sto se tice 3des-a nije bas dobar primer za poredjenje asm-a i visih programskih jezika .. a sto se tice optimizacije, bas je suprotno, ako pogledas kako rade neke od optimizacija danas, ti samo teoretski to mozes da odradis rucno a i to samo na nivou par kilobajta i 8 bitnih mcu-a (i ja rekoh da sam zaradjivao super kintu pisuci kompleksne aplikacije na 8086 .. ubedili su me da predjem na C tek tamo na 386 masini) .. ali vec kada se predje na 16 bitni rad i vece programe, asm postaje bezpredmetan ... u varijanti jednog osmobitnog mcu-a sa par kb rama ... asm je ok .. ali to je tesko "generalni slucaj"


Ja sam se sjajno zabavljao pisuci pmode 'jezgro' za real-time 3D rendering na 386/486 racunarima. Naravno da 8/16bita nije nikakva barijera. Cak je dosta toga pojednostavljeno sa 32bitnom arhitekturom.

Uglavnom asm vise ne koristim vec godinama. Kao i ostatak sveta pristao sam da zrtvujem performanse zarad malo fleksibilnosti.

Zabluda je da kompajleri generisu bolji kod od coveka. Bilo je ovde poredjenje o igranju saha sa programiranjem. Vrlo neprikladno. Mozda izbor i upotreba registara jeste kombinacioni problem sa exp slozenoscu za kompajler, ali za coveka nije. Za razliku od kompjutera mi mozemo da prekrojimo algoritam na instrukcijskom nivou daleko svrsishodnije. Kompajler ne razume kontekst problema. Tako i mala kolicina kreativnosti uz dobro poznavanje arhitekture daje kvalitetniji program u svakom smislu.
[ bogdan.kecman @ 26.05.2010. 21:01 ] @
Citat:
Ja sam se sjajno zabavljao pisuci pmode 'jezgro' za real-time 3D rendering na 386/486 racunarima

zar i ti sine brute :D

odosmo u amiga vs pc pricu ... teoretski, ako imas neograniceno mnogo vremena, uvek ces ga napisati bolje nego kompajler .. ali .. "neograniceno mnogo vremena" je ono sto "kosta puno para" u celoj toj prici
[ Odin D. @ 27.05.2010. 00:40 ] @
Citat:
vlada_vlada: Za razliku od kompjutera mi mozemo da prekrojimo algoritam na instrukcijskom nivou daleko svrsishodnije. Kompajler ne razume kontekst problema. Tako i mala kolicina kreativnosti uz dobro poznavanje arhitekture daje kvalitetniji program u svakom smislu.

Slazem se, samo navedi kvantitativne okvire velicine koda i kolicine vremena u kojima mozes to da uradis i kakav to znacaj ima u praksi.
Teoretski, mogu i ja da pobijedim Deep Blue-a u sahu kad bi partija trajala 2 godine, ali prakticno to nema nikakvog znacaja, posto partija traje sat-dva.
[ madwolf @ 27.05.2010. 09:53 ] @
Zanimljiva rasprava :) Pa reko da napisem i ja koju rec.
Po meni, neko ko je nov ne treba da krene od ASM vec od C-a npr, da se ne deprimira mnogo u startu.
Kad se stekne malo iskustva sa C-om, skapira konkretna arhitektura MCU-a, tada treba porazmisliti da li treba preci na ASM ili ne.
Danasnji C kompajleri su uglavnom dobri, u smislu da generisu brz kod.

Da ne bude zabune, ne bavim se stvarima "vidi sta sve mogu da spakujem u 16f84a"...
Tako da, ASM samo kad se mora ;)

Neko je pitao za ilustrativan primer kada se ASM code drasticno bolje ponasa od C code.
Ja sam konkretno radio vektorsku kontrolu asinhronog motora na jednom DSP-u. Algoritam struje regulacije se izvrsava na svakih 100us.
ASM code se izvrsava 2-3us, a C kod 15-17us. Dovoljno ilustrativno? :) Usput, razlike izmedju DSP-a i MCU-a na ovom nivou rasprave mislim da nisu bitne toliko.

A zasto ASM? Pa zato sto C, Pascal, Basic nisu napravljeni da paralelizuju izvrsavanje, a i kompajler ne moze bas da razmislja ko covek.
OK, dosta stvari zavisi od arhitekture, kompajlera, kakve opcije ima kompajler itd.

Vreme? Ucenje asemblera oduzima neko vreme, to je vec individualno. Prvi put je najteze. Svi mi pravimo svoje male biblioteke funkcija, koje napisemo jednom, unapredimo par puta i iskoriscavamo jako mnogo puta :) svi to rade. A i ima dosta primera na netu za sve i svasta. Nije to ASM programiranje bas toliko tesko.

Sto se mene konkretno tice, ja pisem uglavnom C code. ASM samo kada mora, najvise kada me C kompajler dovoljno iznervira da nece da nesto prevede kako ja hocu :) Sve zavisi od konkretne primene, sta se ocekuje od SW i slicno..

Veliki pozdrav,
Milan.
[ strš @ 31.05.2010. 22:41 ] @
Pozdrav.
Evo mene opet.
Prihvatio sam vaš savet i počeo sam da prelistavam literaturu vezano za mikrokontrolere.Imam par nedoumica pa ako može opet da mi pomognete.Nemojte mi zameriti ako ste mi ranije već dali odgovore na ova pitanja.
Na koji način pišem program? tj. imam projekat u glavi i koja procedura treba da se radi da bih došao do krajnjeg rezultata.Znam da sam na početku napisao kako ja to "vidim" ali sad kad želim nešto konkretno da uradim nije mi jasno.
Recimo, projekat hoću da pišem u C-u-koji je to program? Recimo imam program Codeblocks(negde sam pročitao da je ok) i sad ,program sam napisao u c-u (i dalje ne znam kako) i kako da ga "upišem" u program Code blocks?
Nisam siguran da sam vam objasnio moje nedoumice,Ako je neko strpljiv neka mi objasni korak po korak sa konkretnim programima koji su potrebni.
Još jednom se izvinjavam ako već imam odgovor u predhodnim postovima ali ja ih nevidim jer sam zbunjen.
Unapred hvala.
[ Odin D. @ 31.05.2010. 23:03 ] @
Citat:
Iz ovih tvojih pitanja ja sam stekao neku sliku o tvom trenutnom nivou i ako ces mene da poslusas, ostavi na par mjeseci mikrokontrolere po strani i nauci neke osnove programiranja i racunarstva uopste.
Ja bih ti predlozio C za start (iako nije najlaksi za startovanje), ali s obzirom da su cilj mikrokontroleri nadoknadices taj nesto sporiji start kasnije jer kad krenes sa mikrokontrolerima neces morati tada da ga ucis.


Kad sam ti par strana ranije ovo savjetovao, tacno sam znao zasto ti to savjetujem.

Vidi, ti ovaj savjet mozes da poslusas, a mozes i da ne poslusas, imaces koristi i u jednom i u drugom slucaju.
Ako me poslusas, naucices neke stvari koje ce te odvesti blize tvom cilju.
A ako me ne poslusas, naucices da je ponekad pametno poslusati neciji savjet cak i kad ti savjetuje nesto drugo od onog kako ti mislis da treba.

U svakom slucaju oba ova "znanja" su korisna, a ti odaberi ono koje ti se vise svidja :)

[ branko_g @ 01.06.2010. 13:23 ] @
Citat:
Na koji način pišem program? tj. imam projekat u glavi i koja procedura treba da se radi da bih došao do krajnjeg rezultata.

Sa oskudnim poznavanjem programerske veštine teštko da ćeš moći da (brzo) dođeš do nekih (većih) rezultata.
Za početnika bi sam PUT trebao biti CILJ. Prvo bi trebao da pogledaš primere Koda i Appnote koje sigurno ima na sajtu proizvođača,
pogledao bih šta još ima na netu i probao da zarumem kako to radi.
I poćeo bih od najjednostavnijih stvari: Definisati porove kao ulaz ili izlaz i probao sa najjednostavnijim programom, LED koja "žmiga".
Ako si to uspeo, onda si savladao rad sa programskim okruženjem, preveo program bez grešaka i Flash-ovao sam mikrokontroler.
Tek onda možeš razmišljati o tome da program deliš na logičke celine koje bi onda grupisao u pojedinačne fajlove, na primer:
ioinit.c
uart.c
led.c
tastatura.c
adc.c
spi.c
timer.c
....
(naravno sa pripadajućim .h fajlovima)

Radi se o tome da naučiš da manipulišeš periferijom, koja je u stvari interfejs prema spoljnom svetu.
I počni od manjeg ka većem, prvo LED, posle TASTER, onda TAJMER ili UART....

Citat:
Recimo imam program Codeblocks(negde sam pročitao da je ok) i sad ,program sam napisao u c-u (i dalje ne znam kako) i kako da ga "upišem" u program Code blocks?
C::B je teks-editor ili bolje rečeno editor Source-koda, koji ti svojim funkcijama olakšava pisanje programa. Na primer ključne reči i izrazi kao
Code:
 
char
void
#define

će biti drugačije obojeni što omogućava daleko pregledniji program.
Dovoljno je da tom fajlu koji kucaš daš ekstenziju ".c" i već ćeš videti sve C::B mogućnosti, kao na primer da pokazuje gde počinje blok instrukcija({), a gde se završava (}).
Program pišeš naravno preko tastature vodeći računa o C-sintaksi, ili preko Copy-Paste kopiraš delove nekog tuđeg koda.

Ne znam za koji si se procesor odlučio ali evo jednog relatino jednostavnog primera za Atmel AVR.
Tu možeš videti kao izgleda podela funkcionalnosti u više fajlova i kao se piše jedan program u jeziku "C".
http://www.automatika.rs/index...it-atmel-avr-za-pocetnike.html

E sad dolazi onaj teži deo. U CodeBlocks pišeš program ali o ne poseduje kompajler i linker za prevođenje C-koda u mašinski kod mikrokontrolera.
Taj kompajler moraš onda da povežeš kao eksterni program, ili koristiš neko programersko okruženje gde je sve već integrisano, kao na primer WinAVR.



[ Odin D. @ 01.06.2010. 14:11 ] @
Ti si to Branko lijepo objasnio, ali pogledaj sad kako njemu izgleda tvoj tekst, kada sve one pojmove koji su njemu nepoznati zamjenis sa XXXXX:

Citat:
Sa oskudnim poznavanjem programerske veštine teštko da ćeš moći da (brzo) dođeš do nekih (većih) rezultata.
Za početnika bi sam PUT trebao biti CILJ. Prvo bi trebao da pogledaš primere XXXXXXi XXXXXXkoje sigurno ima na sajtu proizvođača,
pogledao bih šta još ima na netu i probao da zarumem kako to radi.
I poćeo bih od najjednostavnijih stvari: Definisati XXXXX kao XXXXX ili XXXXXi probao sa najjednostavnijim programom, XXXX koja "žmiga".
Ako si to uspeo, onda si savladao rad sa programskim okruženjem, preveo program bez grešaka i XXXX-ovao sam mikrokontroler.
Tek onda možeš razmišljati o tome da program deliš na logičke celine koje bi onda grupisao u pojedinačne fajlove, na primer:
XXXX.X
XXXX.X
XXX.X
XXXXXXX.X
XXXX.X
XXXX.X
XXXX.X
....
(naravno sa pripadajućim X.X fajlovima)

Radi se o tome da naučiš da manipulišeš XXXXX, koja je u stvari XXXXXX prema spoljnom svetu.
I počni od manjeg ka većem, prvo LED, posle TASTER, onda XXXXXX ili XXXXXX....

sad dolazi onaj teži deo. U CodeBlocks pišeš program ali o ne poseduje XXXXXX i XXXXXXza prevođenje C-koda u XXXXXX mikrokontrolera.

Ako jos dovedemo u pitanje i njegovo razumijevanje pojma program, koje ipak nisam zamjenio sa XXXXX, tek onda mozes misliti kakva zbrka nastaje u njegovoj glavi.

Kad bi on mogao da razmije sta mu ti pricas, vec bi znao to sto mu pricas...

Jedna od najtezih stvari kad pokusavas nekog nesto nauciti je da uspijes da pogledas na stvari njegovim ocima.
Citat:
Taj kompajler moraš onda da povežeš kao eksterni program, ili koristiš neko programersko okruženje gde je sve već integrisano, kao na primer WinAVR.

On uopste nema ideju kako i u kojem "programu", kako ga on zove, stici do "Hello World" na PC-ju, tako da eksterno povezivanje kompajlera za mikrokontroler njemu zvuci kao i meni uputsvo za heklanje... :)

Pozdrav!
[ strš @ 01.06.2010. 15:22 ] @
Pozdrav.
Pogrešno sam sastavio pitanje (verovatno umor ili nedovoljna koncentracija) tako da se izvinjavam.
Pošto sam se više puta vraćao na predhodne postove odlučio sam da se pozabavim sa programskim jezikom C.Pošto tek počinjem našao sam neke literature na srpskom,normalno za početnike i u tim početnim objašnjenjima postoje primeri koji se analiziraju.E sad je problem, jer želim da i ja napišem taj isti program (lakše pamtim) i da ga "probam" ali sa kojim programom?Možda je za vas ovo glupo pitanje ali za mene je ,za sada, enigma.
Pošto znam da ste OK, imam slobodu da vam ovakva pitanja postavim a da me nećete ismejavati.Najlakše a i najbrže ću nastaviti sa učenjem ako mi konkretno odgovorite.
Unapred se zahvaljujem.

[Ovu poruku je menjao strš dana 02.06.2010. u 23:16 GMT+1]
[ bogdan.kecman @ 01.06.2010. 15:53 ] @
Citat:
Pošto tek počinjem našao sam neke literature na srpskom


uh, pazi ovako, ako ti je engleski problematican, batali i C i mikrokontrolere i celu tu papazjaniju i uplati kurs negde - nauci engleski pre bilo cega drugog. Kolicina (i starost) informacija dostupnih na srpskom je - pateticna. Nauci engleski "pod hitno", pa onda sve ostalo.

Za PC - moj savet ti je da skines microsoftov dzaba c++ kompajler http://www.microsoft.com/express/Downloads/
za MCU - moj savet ti je mikroC (www.mikroe.com) demo verzija ima limit od 2k koji kao pocetnik neces probiti. Posle kad naucis, odluci sam dal ces da kupis mikroC full verziju ili ces da koristis neki drugi C kompajler. savetujem mikroC posto dolazi sa puno primera, vrlo je jednostavan za rad i vrlo je zgodan za pocetnike.


pre bilo cega - procitaj: http://en.wikipedia.org/wiki/Compiler

[ strš @ 03.06.2010. 18:01 ] @
Pozdrav.
Ovo pitanje sam postavio dosta ranije(ne u ovoj temi) ali ako može da mo opet odgovorite ,a to je:
Imam kompajler (napokon shvatih da se u njemu piše program) i napišem program ,onda programiram MCU pa tako programiranog "ubacim" u razvojni sistem da bih video reultat svoga rada.Da li sam u pravu?Ako jesam postoji li kompajler u kome mogu da napišem program u C-u i da vidim šta se događa na pin-ovima od MCU-a?Ako nemože kako može?
Ovo mi je potrebno da bih konkretno video šta se dešava na MCU-u kad naiđem na neki primer.
Unapred hvala.
[ Odin D. @ 03.06.2010. 18:45 ] @
Pogresno si razumio sta je kompajler.
[ strš @ 03.06.2010. 19:25 ] @
Ako ti nije teško objasni mi.
[ Odin D. @ 03.06.2010. 19:45 ] @
Vec ti je objasnjavano nekoliko puta, relativno detaljno, u prethodnim postovima.
Ocigledno je da nije dovoljno procitati definiciju necega u par recenica da bi stekao ikakvo upotrebljivo razumijevanje o cemu se tu radi.

Predlazem ti da u cilju savladavanja ove problematike poslusas neki od savjeta koji su ti vec nekoliko puta davani.
[ strš @ 03.06.2010. 19:57 ] @
Sad sam tek zbunjen.Hvala ti na odgovoru.
Više ne znam ni šta ni kako da pitam da bih dobio odgovor koji ću razumeti.Hvala na savetima da treba da čitam i da istražujem literaturu ali dolazim do problema i ne dobijam KONKRETAN odgovor na pitanje koje sam postavio.Možda neki put pitam i više puta isto ali ako imate strpljenja odgovorićete mi na njih.Ako nećete opet je uredu,nema ljutiš.I dalje ste najbolji.
Pozdrav.
[ korak @ 03.06.2010. 20:11 ] @
Citat:

Mozda teoretski, ali sumnjam i da je teoretski.
Analogija ti je ista kao i kad bi rekao da kompjuter teoretski moze da igra sah samo onoliko dobro koliko i covjek koji ga je programirao, mejdjutim svi znamo da to nije tako...

Nema teorije da pobijedis moderne C-kompajlere u optimizaciji koda, osim u neravnopravnim uslovima kada ti je za slucaj za C-om dato pola sata na raspolaganju, a za asembler mjesec dana. A i to samo do odredjenog nivoa netrivijalnosti, jer preko nekog nivoa (koji nije toliko visoko) ne bi ti pomoglo da imas 10 godina na raspolaganju, jer bi na kraju prve godine poceo da zaboravljas od cega si poceo...

Tvrditi da je asembler bolji od C-a nije nista drugo nego tvrditi da ce svaki covjek napisati bolji kod od kompajlera, sto nema veze sa zivotom, a pogotovo nema veze sa mozgom kad se radi o pocetnicima, odnosno, cak stavise, o bilo kome ko nije izuzetno uverziran profesionalac...

Jedno pitanje:
Sta bi ti radio da ti je neko, prije nego si ti napravio taj usb driver, dosao i zatrazio da mu napravis nesto sto ima usb, can i profibus, a pri tom treba nesto i da radi, recimo loguje saobracaj sa tih magistrala na SD-kartu ili hard disk, prikazuje to na 480x320 grafickom displeju i moze da se upravlja preko touchscreen-a?
Eto to je jedan onako, straight-through uredjaj, pravolinijski, nema sta mnogo da se misli niti kakvih silnih mozganja i nepoznanica.
Koliko mislis da bi ti trebalo za to u asembleru?


Odkud takva srdzba???

Nigde nisam napisao da je za programiranje bolji asembler od C-a, naprotiv Samo sam izneo teorijsku tvrdnju koja se nalazi u svim udzbenicima i koja se napominje na predavanjima na el. fakultetima.

Takodje sam naveo i uticaj coveka kao programera, njegovu sposobnost da ispise odredjen broj redova ispravnog koda za sat vremena, iz cega proizilazi da je programiranje efikasnije na visim programskim jezicima. Pod ovom efikasnoscu podrazumevam brzinu pisanja ispravnog koda, znaci sa ispravljanjem gresaka.

Uostalom, prevod C programa ima obilje poziva podprograma koji su napisani u asembleru.

Izvini, nisam bio u situaciji da ti ranije odgovorim.

Molim te bez srdzbe, pozdrav.
[ bogdan.kecman @ 03.06.2010. 20:18 ] @
konkretan odgovor na to sta je kompajler? - dobio si 2 odgovora i jedan link imas na tom linku i link na isto to na srpskom ako ti je engleski problematican

konkretan odgovor na "tvoj prosli post" - NE
[ strš @ 03.06.2010. 21:03 ] @
Nisam ljut već iznerviran ,ali na sebe,zbog toga što nikako nemogu da uhvatim nit.Vi ste OK.Nemojmo sad da se vrtimo oko mog neznanja kako se nešto zove.Znam da to treba da znam i trudim se da naučim.Da ponovim pitanje ali uopšteno.
Na koji način da ono što napišem(program koji mi je dat kao primer) sprovedem u delo ali simulacijom na računaru(ne fizički sa MCU-om).Hoću da vidim kako blinka dioda u simulaciji?Ovako ja "znam".Kopiram HEX fajl (ili ASM) u "proteus-u" a pre toga nacrtam šemu i pustim simulaciju ili u programu "picsimulatoride".Ako nema program sa koji to sve objedinjuje ,a dobio sam odgovor da nema, onda kako vi to radite?Da li ceo program napišete pa onda simulirate ili to radite postupno?
Još jednom,ljut sam na sebe,ne na Vas.
Pozdrav.
[ bogdan.kecman @ 03.06.2010. 21:16 ] @
na primer kombinacija MikroC i Proteus

1. otvoris mikroC-ov IDE
2. napravis projekat
3. iskompajliras projekat (dugme build) - on ti izgenerise hex
4. startas proteus isis, nacrtas semu
5. na mcu u isis-u kazes da koristi hex fajl koji ti je izgenerisao mikroC
6. pustis simulaciju
7. vidis sta ne valja, zaustavis simulaciju
8. promenis program i iskompajliras ponovo
9. goto 6


na primer kombinacija MPLAB i ISIS

1. u mplabu odaberes toolchain koji hoces da koristis (mpasm, hitech c, picc, c18, c30..)
2. kreiras projekat
3. napises program
4. napravis u isisu shemu, zatvoris isis
5. odaberes u mplab-u VPSIM kao debager
6. debagiras program iz mplab-a (run / step by step) - on ce ti otvoriti ISIS u prozoru kontrolisanom od strane MPLAB-a
[ strš @ 03.06.2010. 21:25 ] @
Konkretno.Hvala puno!
Za sad ne smem da vam postavljam pitanja ,bojim se opet ću da lupetam.
Kad sledeći put negde zastanem eto mene opet.Do tada ću valjda savladati šta je šta.
Još jednom HVALA!
[ Odin D. @ 03.06.2010. 21:28 ] @
Pozdrav @Korak,

ma nema nikakve srdzbe, niti ljutnje :) moguce je da ti moj post necim "vuce" na tu stranu, ali nisam imao namjeru da ostavim takav utisak :)

Zelio sam samo da naglasim da asembler kao asembler ne znaci nista, posto u njemu nema ugradjene nikakve "vjestacke logike ili inteligencije" kojom bi se dao uporedjivati sa kompajlerima i optimizacijom visih programskih jezika.
Upotreba asemblera samog po sebi ne garantuje nista, posto sva njegova efikasnost zavisi od onoga ko ga upotrebljava.
Nevjest asemblerac ce napraviti gori kod nego da je pisao u Javi pa kompajlirao.

Prema tome, po meni, ima smisla pricati samo o tome koliko neki konkretan covjek Pera, Mika, Zika, moze da nadmasi C-kompajler u nekom odredjenom zadatku.
U uslovima programa danasnje prosjecne slozenosti, velicine, vremenskih rokova i cijena tog rada ja ne poznajem nijednog covjeka koji moze biti produktivniji na asembleru nego u C-u, ukljucujuci i velicinu koda i brzinu izvrsavanja u tu produktivnost.

Sto se fakulteta tice, ako izuzmemo ove nase kojima cilj nije obrazovanje studenata nego uhljebljenje profesora do pemzije, koji za danasnju nastavu koriste svoje udzbenike napisane ranih 80-tih godina, svuda u svijetu se doticna problematika u startu izucava na C-u.

U poslednjih 10-15 godina citava industrija, od proizvodjaca hardvera i kompajlera, pa do krajnjih korisnika nastoji da "zatre" asembler zbog mnostva problema koje njegovo koriscenje izaziva, cak i u minijaturnim modulima.
Projektovanje novih jezgara se radi tako da se asemblerske instrukcije steluju tako da budu optimizovane za kompajlersko koriscenje, a ne za ljudsko, tako da kod nekih novih jezgara srecem asemblerske instrukcije za koje ne znam sta im je glava a sta rep...
To moze jos donekle da prodje kod malih 8-bitnih jezgara, ali za sve ostalo preko toga rad u asembleru postaje nocna mora, ako je uopste zamisliv.

U nekom od svojih prethodnih postova si napisao nesto kao "da moras tako da radis ili da si prisiljen". Opet kazem, tesko mi je povjerovati u to, posto je danas dosta toga dostupno za male pare.
Kod mene se trenutno na stolu i oko stola nalaze EasyPic3 (~100€), dva razvojna modula sa Infienon XC164(~125€) i XC167(~125€) i usb debugger za XC16x dosao uz ovu drugu plocu, Dragon programator za ATMEL (45€), MSP430 u usb stiku (20€), MSP430 razvojna plocica za ZIF socketom (100€) i MSP430 usb programator od Ti-ja (~90€), Olimex razvojna plocica za ARM Cortex M3 (20-30€) i programator za isti (40-50€), a i druge ARM-ove, ST-LINK usb debugger za ST32 (~25€), Primer2 kit sa grafickim displejem, touchscreen-om, zvukom, joystickom, 3D-axis chipom, bla bla.. (45€), Beagleboard (650MHz ARM Cortex M8 sa grafickim cipom i DSP-om, 256MB RAM - vozi Linux bez problema sve sa pustanjem filmova u Full-Screen) (117€ !).... a proslo ih je sigurno jos toliko preko ovog stola...
Kao sto vidis, nista od ovog ne kosta toliko da ga "kupujes jednom u zivotu", a nesto od ovoga sto ja imam, uopste i nije najeftinija solucija koja postoji.
Za sve od ovoga postoje besplatni kompajleri, alati i biblioteke, ili komercijlni koji se mogu koristiti do velicine koja cesto pokriva dosta potreba.

Ja ne znam sta bi to covjek morao da radi danas pa da bi bio "prisiljen" da pise svoj kompajler i radi u asembleru, iskljucivo koristeci samo jednu familiju mikrokontrolera!?
Ako si sam sebi "nametnuo" takve uslove meni bi licno bilo zanimljivo da cujem koji razlozi stoje iza toga, naravno ako nisu licne prirode vec strucne.

Pozdrav!

[ strš @ 03.06.2010. 21:44 ] @
Pročitao sam tvoj post.Pošteno,pola nisam razumeo(onaj deo šta imaš na stolu-mora da ti je ili veliki sto ili ti je ogroman lom na njemu).U početku sam hteo da naučim assembler jer sam smatrao da je najbolji,najbrži...Kako sam počeo sa ovom temom shvatio sam ,pomoću Vas, da ima i naprednijih jezika od assemblera ,tako da sam krenuo sa izučavanjem C jezika ali ,koliko sam shvatio,valja znati i assembler zbog nekih situacija.Pošto nisam prepametan,već običan čovek, ne mogu oba jezika da savladam u isto vreme,dao sam sebi zadatak da savladam C pa onda assembler.Ako grešim ispravi me.
Za pitanje u vezi "mog kompajlera" ne mogu ti dati odgovor jer sam shvatio da u stvari ne znam (za sada) šta je to,već sam se verovatno izlupetao na predhodnim post-ovima.
Pozdrav.
[ Odin D. @ 03.06.2010. 22:01 ] @
^Moj prethodni post je bio za @Koraka, ne za tebe :)
Vidis da ti trcanje pred rudu izaziva nepotrebno zbunjivanje...

Ti knjigu u sake, i stolicu pod dupe i javi se na raport za 10 dana da te malo propitamo :)
[ strš @ 03.06.2010. 22:08 ] @
UPS!!Izvinjavam se mnogo.Dosta mi je za danas.
Pozdrav.
[ alekata @ 04.06.2010. 08:06 ] @
Za gosp. Odina :
Koje kompajlere i po mogucstvu IDE alate koristite uz neke od gore navedenih interfejsa za programiranje/debagiranje i koje su njihove (eventualne) cene kostanja ?
[ Odin D. @ 04.06.2010. 11:00 ] @
PIC odavno ne koristim, samo skuplja prasinu.
Za Cortex-M3, MSP430 i AVR koristim gcc kompajler koji je besplatan. Kao IDE tu su Eclipse, AVR studio, Atolic Studio.... sve besplatno.
Za XC167 je IAR besplatan do 32K, mada ima nekih kompajlera koji u ta 32K ne racunaju koriscenje funkcija iz biblioteka koje stignu u kompajler, pa tako ako se koriste drajveri za periferije iz biblioteke, i neke komplikovanije stvari poput TCP/IP stack-a.... mogu se iskompajlirati programi znatno veci od 32K.
Takodje, postoji i besplatan gcc kompajler za XC16x (http://www.kpitcummins.com/ats...ctor/development_infineon.htm#)

Znaci, u principu gcc.
[ bogdan.kecman @ 04.06.2010. 13:22 ] @
ako pogledas i ove komercijalne .. za TI na primer CodeComposerStudio koji uopste nije dzaba je gcc sa par patcheva i ide-om ..

tako da - gcc rulez :D
[ Odin D. @ 04.06.2010. 14:12 ] @
I ne samo on, ima dosta drugih komercijalnih IDE-a za druge platforme sa ohoho! cijenom koji su bazirani na gcc-u...
Malo nasminkaju Eclipse, ubace neki out-of-the-box veseli dodatak za 1-2 usb debuggera, napisu da imas podrsku telefonom i lupe cijenu od nekoliko stotina dolara za basic verziju do par 'iljada za par glupih dodataka poput version control sistema, UML zamlacivatora i sl...
[ zoran968 @ 05.06.2010. 11:25 ] @
Citat:
bogdan.kecman: na primer kombinacija MikroC i Proteus

1. otvoris mikroC-ov IDE
2. napravis projekat
3. iskompajliras projekat (dugme build) - on ti izgenerise hex
4. startas proteus isis, nacrtas semu
5. na mcu u isis-u kazes da koristi hex fajl koji ti je izgenerisao mikroC
6. pustis simulaciju
7. vidis sta ne valja, zaustavis simulaciju
8. promenis program i iskompajliras ponovo
9. goto 6


na primer kombinacija MPLAB i ISIS

1. u mplabu odaberes toolchain koji hoces da koristis (mpasm, hitech c, picc, c18, c30..)
2. kreiras projekat
3. napises program
4. napravis u isisu shemu, zatvoris isis
5. odaberes u mplab-u VPSIM kao debager
6. debagiras program iz mplab-a (run / step by step) - on ce ti otvoriti ISIS u prozoru kontrolisanom od strane MPLAB-a




bogdane, da li treba neki drajver da bi se integrisao ISIS u Mplab. Ja sam probao po tvom uputstvu , ali mi ne uspeva.
[ bogdan.kecman @ 05.06.2010. 11:39 ] @
jok ... meni je mplab sam instalirao vpsim debug modul za isis 7... ja sam doduse isti odavno prestao da koristim tako da nemam pojma da li skorije verzije mplab-a dolaze sa tim modulom... pogledaj pri instalaciji mplab-a da li ga jos uvek ima u ponudi.... ja sam evo sad pogledao na virtualnoj masini relativno skoro instraliranoj na kojoj je isis (7.6 sp4) i mplab (8.50) ... i imam u mplab-u "debugger/select tool/proteus vsm" a ne secam se da sam ga nesto posebno instalirao pri instalaciji mplab-a (ni pri instalaciji proteusa)... cak nisam ni znao da je tu dok sada nisam proverio, to sam zadnji put koristio pre vise od godinu dana (hw debagiranje rulez - za 5min izbodes proto bord i debagiras ga hardverski sa pickit2 i ne razmisljas dal simulator radi dobro ili ne) ... sada za simulaciju uglavnom (99.9% slucajeva vezano za mcu) koristim oshonsoft (legalno kupljen za razliku od ovog isis-a) koji je prilicno mocan kada krenes da pravis za njega dodatne module.. ja isis koristim samo za analognu elektroniku posto sam glup da naucim kako se koristi spice koji je dzaba (a koji je isti engine koji koristi i isis i svi ostali)
[ zoran968 @ 05.06.2010. 20:16 ] @
ISIS koji imam je 7.4.
U debugger-u MPLAB-a postoji VSM, i njega sam izabrao kao alat za simulaciju.
Kada iz MPLAB-a pokrenem simulaciju imam poruku "noting to simulate"

Da li treba negde u MPLAB-u da se definise putanja do dizajna u ISIS-u i kako?
[ bogdan.kecman @ 05.06.2010. 20:31 ] @
imas u vpsim prozoru u toolbaru open dugme na koje kliknes i otvoris DSN fajl
[ zoran968 @ 05.06.2010. 23:04 ] @
Nevidim nigde vpsim prozor, jasno mi je da negde moram da upisem putanju do dizajna, ali ne mogu da nadjem gde.
[ zoran968 @ 05.06.2010. 23:20 ] @
Ja nisam do sada nikada radio sa Proteus-om, i sada vidim da moze iskljucivo da se samo ASM fajl ukljuci , a ne C fajl - ili mozda gresim.
[ bogdan.kecman @ 06.06.2010. 00:05 ] @
u proteusu se ukljucuje HEX fajl (ono sto kompajler izgenerise) a kroz mplab mozes da debagiras bilo sta (c, c++, asm .. ) sto ima toolchain koji je kompatibilan sa mplab-om

ako pogledaj screenshot koji sam ti poslao tamo je C fajl .. evo ti i film: http://elco.crsndoo.com/files/primer.avi treba ti kodek sa http://camstudio.org/ (mozes da instaliras camstudio pa da koristis njegov player: http://www.camstudio.org/CamStudio20.exe ili da koristis kodek: http://camstudio.org/CamStudioCodec14.exe - to je sw za snimanje ekrena - dzaba/open source)

[ bogdan.kecman @ 06.06.2010. 00:15 ] @
uploaduje se i primer2 http://elco.crsndoo.com/files/primer2.avi - bice tamo za ~10min .. tu imas malo vise ..

sve u svemu, trebalo bi da ti je jasno .. ja bolje od ovoga stvarno ne umem (inace toolchain za ovaj projekat je CSC PICC )
[ zoran968 @ 06.06.2010. 14:34 ] @
Zahvaljujem na trudu bogdane, snasao sam se nekako

pozdrav
[ bogdan.kecman @ 06.06.2010. 16:16 ] @
nema na cemu,

- da li si uspeo da napravis program koji radi "bilo sta" u c-u (standardan hello world bi bio da upalis/ugasis le diodu)
- da li si to uspeo da iskompajliras i napravis hex
- da li si to uspeo da izsimuliras (isis ili oshonsoft)
- da li si skinuo filmove sa mog servera (da ih brisnem odande)
[ zoran968 @ 07.06.2010. 10:27 ] @
Citat:
bogdan.kecman: nema na cemu,

- da li si uspeo da napravis program koji radi "bilo sta" u c-u (standardan hello world bi bio da upalis/ugasis le diodu)
- da li si to uspeo da iskompajliras i napravis hex
- da li si to uspeo da izsimuliras (isis ili oshonsoft)
- da li si skinuo filmove sa mog servera (da ih brisnem odande)



-Da , napisao sam program koji salje neki tekst na lcd u zavisnosti koji je taster pritisnut (ima ih 4)

-Iskompajlirano

-Nacrtao semu u ISIS-u , uvukao hex i probao simulaciju - koja radi isto kao i na razvojnom sistemu.

-Filmove sam skinuo i mozes da ih obrises.

Zahvaljujem ti se jos jednom.

Mada imam jos pitanja , ako si voljan da pomognes. Kada citam tudji source, jasno mi je sve u vezi pointera , (ako ih ima) - ali ja kada treba nesto da odradim sa pointerom, blokiram potpuno i uglavnom ne odradim nista. Mislim da ih nikada necu skapirati tako da mogu sam da ih upotrebljavam. Imas li neke primere za c18 sa pointerima. I da li je pametnije da radim sa ccs , kako mi mnogi savetuju.
[ bogdan.kecman @ 07.06.2010. 11:40 ] @
ccs je odlican kompajler za 16F* i manje picove. za 18F i vece ti ja savetujem c18/c30 posto su legalni (nesto nisam siguran da si taj ccs platio?!). Ja licno koristim za 16F i manje ccs (koji sam kupio uz neki dev modul) a za 18F i vece ni ne mogu da ga koristim (posto sam kupio samo verziju koja radi do 16F - ne radi za 18F) a za 18F i vece koristim microchip C18 i C30 koji su dzaba u verziji bez optimizacija sto je uglavnom ok (prvih 30 dana rade sa optimizacijom).... sad, ja uopste ne savetujem da gubis vreme sa serijama pre 18F posto su em skuplji em losiji od 18F i vecih .. al to je vec sad tvoja odluka..

za pointere - spominjano ti je vec (ili u slicnoj temi, mislim da je odin spominjao) uzmi neki "learn c in 21 days" i prvo nauci C .. pointeri se slabo uce citajuci tudji source, mnogo je lakse da procitas 2 strane teksta gde je to objasnjeno. generalno pointer je variabla koja cuva adresu (pointer == pokazivac na memorijsku lokaciju / adresu). pointerska aritmetika se zasniva na tome da kompajler zna velicinu objekta na koju pointer pokazuje te kada ti uradis pointer = pointer + 7; on upise u varijablu adresu ne za 7 vecu vec za 7*velicinaobjektanakojupointerpokazuje tj sedam objekata dalje ..
[ zoran968 @ 07.06.2010. 12:04 ] @
jasna mi je definicija pointera, ali ga ja jako tesko kuzim da bih ga primenio, zato kazem kada vidim tudji kod lako prepoznam sta se htelo reci. Citao sam c u 21 dan, ali izgleda je moje ogranicenje problem... valjda ce doci jednog dana sve na svoje
[ bogdan.kecman @ 07.06.2010. 19:29 ] @
kako *ti* da ga primenis ce doci vremenom / iskustvom.. nemoj da ga primenjujes "na silu"
[ zoran968 @ 07.06.2010. 19:47 ] @
Vidim i ja da tako mora biti.

pozdrav