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.

3b51.gif (10055 bytes)
Slika 1. Međusobna interakcija

3b52.gif (8293 bytes)
Slika 2. Stvaranje taskova

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

.resume. (TASK)
.suspend. (TASK)
.terminate. (TASK)
.execute. (TASK).

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:

TASK3 equ 3
.
.
.
ldaa #TASK3 swi
FCB .suspend.

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.
Još koju reč više o softverskom interaptu. Svih petnaest ESR se nalazi u programskom kodu koji se izvršava pri pozivu swi. Obrada ovg interapta je najvažniji deo celog MCX11 i predstavlja samo jezgro operativnog sistema.
Na osnovu gornjeg primera mogu se izložiti neke uopštene postavke. Ulazni parametri se prosleđuju pozivnoj funkciji preko registara

ACCA = akumulator A, 8 bita
ACCB = akumulator B, 8 bita
IX
= indeks registar X, 16 bita.

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:

  • Uvek se izvršava najprioritetniji iz grupe spremnih taskova. Ako su taskovi označeni sa TASK1, TASK2 i TASK3, onda je TASK1 najvećeg prioriteta, a TASK3 najmanjeg.
  • Taskovi nisu uvek spremni!!!
  • Jedan task može uticati na aktivnost drugog taska (Sl 1.).
  • Na startu se izvršava TASK1.
  • U jednom trenutku može se izvršavati samo jedan task ( jedan procesor !!!).

3b53.gif (4851 bytes)
Slika 3. Redosled aktivnosti taskova

Zadatak je da se odrade sledeće akcije:

  1. TASK1 stvara taskove TASK2 i TASK3 (Sl 2.).
  2. TASK1 izvršava deo koda 1a, potom se suspenduje (privremeno obustavlja aktivnost i čeka da ga TASK2 ponovo vrati u život sa .resume. ovde je važno napomenuti da se .suspend. i .resume. obično koriste u paru).
  3. Kada je TASK1 suspendovan (samovoljno) omogućen je progres za TASK2, koji izvršava deo koda 2a, nakon čega se suspenduje, čekajući da ga TASK3 probudi.
  4. TASK3 izvršava deo koda 3a i omogućava progres za TASK2.
  5. TASK2 izvršava deo koda 2b i prenosi progres na TASK1.
  6. TASK1 izvršava deo koda 1b, završava svoju aktivnost i aktivnost TASK2.
  7. TASK3 izvršava deo koda 3b i završava svoju aktivnost.

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.

Listing - task.asm
task1

ldaa #TASK2 ;stvara se TASK2
swi
FCB .execute.
ldaa #TASK3 ;stvara se TASK3
swi
FCB .execute.

; blok instrukcija 1a

clra ;svojevoljno obustavlja aktivnost
swi
FCB .suspend.

; blok instrukcija 1b

ldaa #TASK2 ;završava se TASK2
swi
FCB .terminate.

clra ;završava svoju aktivnost
swi
FCB .execute.

task2

; blok instrukcija 2a

clra ;svojevoljno obustavlja aktivnost
swi
FCB .suspend.

; blok instrukcija 2b

ldaa #TASK1 ;ukida suspenziju za TASK1
swi
FCB .resume.

task3

; blok instrukcija 3a

ldaa #TASK2 ;ukida suspenziju za TASK2
swi
FCB .resume.

; blok instrukcija 3b

clra ;završava svoju aktivnost
swi
FCB .terminate.

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.

Potpuni listing programa TASK


Pročitajte više o ovoj temi
Vezni igrač
MCX11 MicroController eXecutive za 68HC11
Semafori
Tajmeri
cMCX11 Real Time operativni sistemi u programskom jeziku C

C o p y r i g h t  1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji