@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.