|
|
|
| Software projekti |
Autor: Stevan Tošić |
|
E-mail: office@mikroe.com |
|
|
SEMAFORI Pri realizaciji real-time aplikacija veoma važan zahtev je brza reakcija na određene događaje.U mikrokontroleru se događaj vezuje za pojavu prekida (interapta). Kod motorolinog kontrolera MC68HC11 postoji 22 izvora prekida i 18 prekidnih vektora. Ako se u aplikaciji koristi više prekidnih linija tada je od velike važnosti obezbediti skladan rad. U MCX11 je ugrađen mehanizam semafora koji može “poboljšati” rad celog sistema kada se koriste prekidi. Reč semafor asocira na signa-lizaciju. U real-time i operati-vnim sistemima uopšte, semafor pre-dstavlja način sinhronizacije između više poslova u nekoj praktičnoj primeni. Više poslova koji sinhronizovano rade zahteva određeni stepen organizacije cele aplikacije. Ovde se pojmu semafora i mehanizmu rada pristupa posredno preko pojma prekida. Prekidi (interapti) Razumevanje mehanizma prekida je veoma važno u programiranju mikrokontrolerskih aplikacija. Svaki mikrokrokontroler “poznaje” skup događaja na koje se može reagovati preko prekida. Navode se konkretni prekidi kod MC68HC11 (jer je MCX11 namenjen za rad sa ovim kontrolerom):
Koji od njih će se koristiti zavisi od potreba same aplikacije. Korištenje mehanizma prekida zahteva sledeće:
Osnovna ideja i savet koji se daje programerima uopšte, bilo da se koristi MCX11 ili ne, je da rutina za obradu prekida bude što kraća. Što je obrada više opterećena programskim kodom, time je usporena reakcija procesora na ostale događaje. Kao posledica nekog događaja možda je potrebno izvršiti složenu obradu podataka - velik kod. Nije teško zaključititi kako to utiče na eventualnu obradu drugih događaja u sistemu. Drugim rečima, real-time operativni sistemi se koriste u uslovima složenijih zahteva odnosno kada u sistemu postoji “više” različitih događaja. Šta se podrazumeva pod rečju “više” je pomalo subjektivna stvar programera. Pojam semafora Posle kratkog opisa o prekida sledi pojašnjenje mehanizma semafora koje nije direktno vezano za prekide. MCX11 obezbeđuje korištenje semafora radi sinhronizacije. Sinhronizacija može biti između dva taska, rutine za obradu prekida i taska itd. Šta je semafor? Semafor je jednostavno 1 bajt koji se može nalaziti u jednom od tri stanja:
Protokol stanja prelaza (iz jednog stanja u drugo) je dat na Slici 1.
Pravila koja definišu prelaz iz jednog stanja u drugo kao posledica korištenja jedne od tri gornje funkcije: 1. .wait.:
2. .signal.:
3. .pend.:
Pozivne sekvence za gornje tri funkcije su:
Jedan praktičan primer (taster i displej) Sledi primer koji ilustruje primenu semafora u jednoj jednostavnoj aplikaciji (Slika 2.). Na liniju IC1 je povezan taster koji se kontroliše pomoću prekida. Na svaki pritisak tastera se treba inkrementirati broj koji se prikazuje na 7 segmentnom displeju. Za ispis na displej se koristi SPI (Serial Peripheral Communications). Jednostavno se to može opisati kao : prekid (desio se neki događaj) – semafor (signalizira se pojava događaja unutar rutine za obradu prekida) – task (obrada događaja – ispis na displej, itd.). Ovaj trougao predstavlja drajver koji je zadužen za opsluživanje ovog događaja. Dakle, sama obrada događaja je “izbačena” u task, čime je izbegnuto pisanje dužeg programskog koda u rutini za obradu prekida. U tasku1 se ispisuje nova vrednost kada se pritisne taster. Ovo je obezbeđeno čekanjem na semaforu SEM1, a signal za novi ispis dolazi iz rutine za obradu prekida IC0. Podsetimo se da se obrada prekida sa linije IC0 dešava kao posledica uzlazne, silazne ili obe (toggle) ivice, što podešava programer. U našem slučaju se može odabrati jedan od prva dva načina rada.
Ova jednostavna aplikacija daje jedan primer primene semafora. Naravno da za realizaciju ovakvog primera nije bila potrebna priča o semaforima. Primena mehanizma semafora (i real-time OS uopšte) dolazi do izražaja kod složenijih zahteva: komunikacija, više tastera, tastature, A/D konverzija, tajmerske funkcije itd.. Kod Sledi deo programskog koda kojim se rešava navedeni problem pomoću mehanizma semafora. Prvo se navodi kod koji grubo skicira kako se u tasku1 čeka na semaforu SEM1, odnosno čeka se pritisak tastera:
Dalje sledi veoma pojednostavljen deo koda (izostavljeni su neki detalji) koji opisuje kako se u rutini za obradu prekida (Isr_IC1) evidentira i signa-lizira dati događaj.
Može se primetiti da u
rutini nema .signal. i da nema
rti. Signalizacija se dešava automatski ma koliko to čudno izgledalo.
|
|
C o p y r i g h t 1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji |