|
|
|
| Software projekti |
Autor: Stevan Tošić |
|
E-mail: office@mikroe.com |
|
|
PROGRAMIRANJE U MCX11 Za uspešno projektovanje aplikacije potrebno je objediniti znanje iz oblasti programiranja i logičko razumevanje konkretnog problema. Real-time programiranje pruža dobru osnovu za elegantno prevođenje ideja u dela. U prošlom broju su kratko opisani fajlovi MCX11. Jedan fajl zaslužuje poseban komentar: TEST.AS. Ovaj fajl je interesantan pre svega jer je podložan izmenama od strane korisnika. Svaka konkretna aplikacija nameće svoje zahteve i zbog toga korisnik mora nekako ugraditi svoj program u navedeni fajl. Najvažniji deo je osmišljavanje rada taskova. Pre toga je neophodno definisati šta koji task radi odnosno koji ulazno/izlazni uređaj podržava. Važno je uočiti veze u toku rada taskova kako bi se uskladio rad čitavog sistema Broj taskova zavisi od konkretne aplikacije. Kada su isprogramirani svi taskovi (fajl TEST.AS) tada se pokreće beč fajl ASSEMBLE.BAT kako bi se preveo u izvršni kod naš program (sa taskovima) i jezgro operativnog sistema zajedno.
Pozivanje funkcija - ESR Kratki opis ESR (Executive Service Routine) u prošlom broju kao cilj je imao sticanje globalnog uvida šta pruža MCX11. Skup takvih funkcija pruža uvid u mogućnosti real-time operativnog sistema. Pri pozivu neke funkcije obično se prosleđuju neki ulazni parametri. Radi ilustracije se ponovo navode funkcije za kontrolu taskova
U sve četiri funkcije kao ulazni parametar je navedena promenljiva TASK koja nosi informaciju nad kojim se taskom treba izvršiti akcija. U navedenim funkcijama se ne vraća nikakva povratna vrednost. Kako se praktično realizuje poziv funkcije u asembleru? Sledi primer kako se privremeno može obustaviti aktivnost taska3:
Deo koda koji je gore naveden
poziva se iz nekog taska. To znači da jedan task može privremeno obustaviti aktivnost
drugog taska. Kao ulazni parametar se navodi TASK3 tako da trenutno aktivni task zna koji
se task suspenduje (privremeno). Posle toga sledi instrukcija swi (software interrupt),
iza koje se navodi FCB .suspend.. Ovako se poziva funkcija za suspendovanje taska.
Tačnije rečeno, postoji samo softverski interapt koji na osnovu identifikatora .suspend.
izvršava određeni deo koda.
Takođe, u gornje registre se smeštaju povratne vrednosti ako postoje, a što zavisi o specifikaciji same funkcije (ESR). Dakle, pre poziva funkcije treba pripremiti ulazne parametre koji se zahtevaju u registrima. Pri izlasku iz funkcije dobijaju se povratne vrednosti u istim registrima (ako postoje za dotičnu ESR) koje mogu uticati na daljnje izvrašavnje koda. U dokumentaciji (fajl MANUAL. DOC) se nalazi detaljan opis svih petnaest funkcija, odnosno kako se prosleđuju parametri za određenu funkciju i gde se dobijaju izlazni parametri ako postoje i njihovo značenje. Sve što je potrebno za programiranje je dobro poznavanje šta koja funkcija radi bez ulaženja u njihovu unutrašnjost (swi). Primer Sledi primer u kome su programirana tri taska za demonstraciju rada navedene četiri funkcije. Prethodno se valja podsetiti nekih činjenica:
Zadatak je da se odrade sledeće akcije:
Dijagrami koji ilustruju primer su dati na Slici 3. Pojmovi stvoriti task i završiti aktivnost su sinonimi za .execute. i .terminate. Oznaka TASKi (i=1,2,3) identifikuje task, a taski (i=1,2,3) se odnosi na potprogram koji predstavlja i-ti task.
U listingu dat je kod koji omogućava multitasking tri taska sa kontrolom redosleda izvršavanja na osnovu gornjih zahteva. Redosled je proizvoljno odabran radi ilustracije. Prava primena MCX11 se ostvaruje tek upotrebom funkcija koje podržavaju elegantan rad u vremenskom domenu kao i semaforskih funkcija. O tome neki drugi put.
|
|
C o p y r i g h t 1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji |