474
1 Proiectarea aplicaţiilor în timp real Introducere

Proiectarea aplicaţiilor în timp real - iota.ee.tuiasi.roiota.ee.tuiasi.ro/~cghaba/PATR/PATRNoteCurs/PATRNoteCurs.pdf · Clasificare a sistemelor de calcul zSisteme transformaţionale

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

1

Proiectarea aplicaţiilor în timp real

Introducere

Clasificare a sistemelor de calcul

Sisteme transformaţionaleSisteme reactive– Sisteme interactive– Sisteme de timp real

De obicei sistemele pot fi încadrate în mai multe categorii

Sistemele transformaţionale

Durata operaţiilor este limitatăTimpul de execuţie nu este criticRezultatele sunt independente de momentul la care sunt produseExemple:– Programe de calcul matematic– Compilatoare– Programe contabile

Sisteme interactive

Sunt în dialog permanent cu unul sau mai mulţi utilizatoriRăspund doar dacă li se solicită în mod explicitTimpul de răspuns nu are influenţă mare asupra răspunsuluiExemple:

– Sisteme de proiectare asistată de calculator– Programe de navigare Internet– Procesoare de text, editoare, tabele de calcul

Sisteme de timp real

Sunt conectate cu un anumit proces (exterior sistemului)Trebuie să răspundă într-un interval de timp limitat solicitărilor externeRezultatele obţinute depind de momentul la care au fost produseDe obicei funcţionează în mod continuuExemple:

– controlul roboţilor– controlul sistemelor de acţionare electrică– sisteme de comunicaţii

Sisteme de timp real

Trebuie să satisfacă următoarele constrângeri:– trebuie să ofere un rezultat/răspuns într-un timp

dat– acţiunile/răspunsurile nu mai sunt de obicei de

nici un folos– necesită predictibilitate şi desfăşurare în timp

Caracteristicile sistemelor RT

Timpul de răspunsProcese multipleSincronizarea componentelorDeterminismulFlexibilitateaAdaptabilitateaNereversibilitatea

Timp de răspuns

Intervalul de timp dintre momentul în care se modifică una sau mai multe intrări ale sistemului şi momentul în care apare răspunsul la ieşirile acestuiaÎn cazul sistemelor complexe timpul de răspuns trebuie corelat cu o anumită planificare a răspunsurilor

Procese multiple

Sistemul poate executa aplicaţii care sunt organizate sub forma mai multor procese care interacţionează între ele şi cu exteriorulProcesele pot fi:– periodice– aperiodice– cvasiperiodice

Utilizarea proceselor necesită existenţa unor mecanisme specifice: planificare, comunicare între procese, tratarea excepţiilor

Sincronizarea componentelor cu timpul fizic

Activitatea subsistemelor trebuie sincronizată cu dinamica proceselor din lumea realăSistemul trebuie să prelucreze informaţii care sunt disponibile doar un anumit interval de timp (în afara intervalului datele respective nu mai sunt de folos)

Determinism

Un sistem este determinist dacă pentru fiecare stare şi combinaţie de intrări va trece într-o stare următoare unică şi va furniza un set unic de valori de ieşireAnticipând comportamentul unui sistem permite planificarea resurselor şi rezervarea lor în avans.

Flexibilitatea şi adaptabilitatea

Are în vedere posibilitatea de dezvoltare ulterioară a subsistemelorPermite utilizarea unui sistem pentru aplicaţii diferite prin realizarea unor modificări minimePermite adăugarea sau dezactivarea unor funcţionalităţi

Nereversibilitatea

Datorită legăturii cu mediul exterior, succesiunea evenimentelor dictată de acesta nu poate fi prevăzută în avansPentru sistemele complexe nu pot fi controlate toate relaţiile cauzaleAnumite activităţi efectuate nu mai pot fi eliminate, sistemul nu mai poate reveni la starea anterioară

Clasificarea sistemelor RT

Sisteme RT hardSisteme RT softSisteme RT ferme

Sisteme RT hard

Trebuie să răspundă la evenimente, obligatoriu, în intervalele de timp impuse prin constrângeriÎn cazul în care nu este respectată una dintre constrângeri, sistemul îşi pierde funcţionalitateaCostul în cazul în care nu se respectă constrângerea poate fi foarte mare şi poate implica vieţi omeneşti

Sisteme RT soft

Trebuie să răspundă la evenimente, obligatoriu, timpul de răspuns mediu trebuind să se încadreze în intervalele de timp impuse prin constrângeri. Se acceptă o anumită toleranţă sau diferite nivele de toleranţă în cazul unor întârzieriÎn cazul unor întârzieri nu apare o cădere a sistemului (incapacitate de funcţionare). Pot să apară costuri, acestea fiind proporţionale cu mărimea întârzierilor

Sisteme RT ferme

Timpul de răspuns poate fi uneori depăşit dar, după ce a fost depăşit, rezultatele obţinute nu mai sunt de folos

Aplicaţii ale sistemelor RT

Aplicaţiile sistemelor de timp real

TelecomunicaţiiReţele de calculatoareControlul proceselor industrialeSisteme de achiziţie şi măsurareSisteme încapsulateAparatură de uz casnicEchipamente militareVehicule de transport terestru şi aerianJocuri video

Concepte greşite legate de sistemele RT

Sistemele RT = sisteme rapideAvansul tehnologic în hardware va rezolva problemele de timp realNu există o ştiinţă a sistemelor RTCercetarea în domeniul sistemelor RT se reduce la acordarea parametrilor de performanţă

Arhitecturi

Sisteme centralizateSisteme descentralizateSisteme distribuiteSisteme descentralizate şi distribuite

Tehnici de realizare a sistemelor RT

Specificare şi proiectare– Metode prin care se verifică funcţionarea din punct de

vedere logic şi se verifică constrângerile de timpProiectare arhitecturală

– Folosirea modulelor gata realizate şi verificarea constrângerilor de timp

– Folosirea diferitelor arhitecturiImplementare

– Utilizarea limbajelor cu primitive adecvate– Utilizarea sistemelor software cu suport pentru timp real

(nucleu sau sistem de operare) pentru aceste primitive

Limbajele pentru sistemele RT

Trebuie să aibă următoarele caracteristici:– Să poată manipula intrările şi ieşirile sistemului– Să aibă primitive pentru gestionarea proceselor– Posibilitatea de tratare a întreruperilor– Să permită definirea tipurilor de date– Să permită introducerea de cod în limbaj de

asamblare– Să aibă primitive pentru manipularea timpului

Consideraţii la realizarea unui sistem RT

Predictibilitatea – trebuie să permită determinarea în avans a:– Comportamentului când sunt nerespectate

constrângerile de timp– Comportamentul când ipotezele de lucru nu sunt

respectate– Timpul de acces şi de răspuns– Comportamentul în cazul informaţiilor complete– Cum va varia calitatea rezultatelor

Consideraţii la realizarea unui sistem RT

Optimizarea sistemului– Optimizarea utilizării procesorului– Optimizarea utilizării memoriei– Calculul celui mai defavorabil caz– Accesul concurent

Bibliografie

Tiberiu S. Letia, Sisteme de timp real, EdituraAlbastra, Cluj-Napoca, 2000Qing Li, Carolyn Yao, Real-Time Concepts for Embedded Systems, CMP Books, 2003

1

Programarea sistemelor de timp real

Implementarea sistemelor RT

Implementarea sistemelor RT

cu nucleu RT sau fărăsincrone sau asincronecu declanşarea acţiunilor funcţie de timp sau funcţie de eveniment

Implementări sincrone

cu interogare în buclăexecuţie ciclicăpe bază de corutinepe bază de stăribazate pe limbaje sincrone

Avantajele implementărilor sincrone

momentul comutării de la un proces la altul este cunoscut dinainteacţiunile necesare comutării sunt redusenu utilizează întreruperi deci nu este necesară salvarea contextuluinu există probleme de acces concurent la resursecomportamentul este previzibil

Interogare în buclă

cunoscută sub numele “polling loop”structura generalădo {

if (eveniment1) actiune1;if (eveniment2) actiune2;….if (evenimentN) actiuneN;

} while(1) //bucla infinita

Execuţie ciclică

Poate fi considerată o formă generalizată a interogării în buclăPrincipiu

– se crează o planificare a proceselor presupunând că ele sunt independente

– se implementează această ordine ca apeluri succesive într-o buclă infinită

Caracteristici– Ordinea de execuţie rămâne mereu aceeaşi– Anumite restricţii de precedenţă pot fi implementate cu

uşurinţă

Execuţie ciclică

Macrociclu = perioada de timp a întregii secvenţePot exista secvenţe diferite pentru moduri de funcţionare diferiteMacrociclul este împărţit în cadre temporale (pentru a lua în considerare restricţiile de timp)Dacă au aceeaşi durată, cadrele poartă denumirea de microcicluri

Probleme cu execuţiile ciclice

Procesele îndelungate trebuie scindate ceea ce poate duce la:– probleme legate de consistenţa datelor– probleme legate de respectarea condiţiilor de

precedenţă

Acţiuni şi riscuri la depăşirea cadrelor temporale

Utilizatorul poate implementa politica de tratare a excepţiei în modul dorit

Oprirea procesului dar emisia unei excepţii

Structurile de date por rămâne într-o stare inconsistentă

Oprirea procesului

Posibilitatea efectului de avalanşăUn proces care nu a cauzat depăşirea

poate rata termenul limită

Nimic

RiscAcţiune

Avantajele execuţiilor ciclice

Secvenţă predefinită de procese– constrângerile pot fi îndeplinite

Nu necesită nucleu RTNu este preemptiv– nu există activitate suplimentară datorită comutării

proceselor– nu este necesară protecţia resurselor la accesul

simultanPlanificarea este flexibilă în funcţie de aplicaţie

Dezavantajele execuţiei ciclice

Orice modificare a unui proces presupune:– verificarea secvenţei proceselor– scindarea proceselor trebuie revizuită

Aceleaşi probleme pentru cazul în care este adăugat un nou procesEficienţă scăzută datorită utilizării unor procese ciclice pentru tratarea evenimentelor sporadice

Cod bazat pe stări/tranziţii

Se bazează pe instrucţiuni if-then şi automate finiteProcesele sunt suspendate/reluate fără pierderea datelor criticeSimple de înţelesPresupun că procesele pot fi concepute să aibă mai multe stări

Algoritmul principal (1)

while (1) {citeste_starea_intrarilordetermina_tranzitia_validaexecuta_tranzitiilereactualizare_starereactualizare_actiune

}

Algoritmul principal (2)

while (1) {citeste_intrarilewhile (1) {

for (fiecare_ramura) determina_stare_urmatoare;}while (1)

for (fiecare_ramura) actualizeaza_stare_urmatoare;}while (1) {

for (fiecare_ramura) activeaza_actiune;}

}

Exemplu

typedef enum {stare1, …,staren} stari; // n este # de staritypedef enum {in1, …inn, EOF} alfabet;typedef stari linie_tabel[n] ;

int move_forward () { //implementeaza tranzitia intre staristari stare;alfabet in;linie_tabel tabel[m]; // m este dimensiunea alfabetuluido {

get(in); //citeste un simbol din fluxul de intrarestare = tabel[ord(in)][stare]; // tranzitieexecuta_proces(stare); // executa procesul indicat

} while (in == EOF); // ultimul simbol}

int executa_process(stari stare) {switch (stare) {

case stare1: proces1(); break; // executa proces 1case stare2: proces2; break; // executa proces 2

….case staren: procesn(); break; // executa proces ndefault: stare1;

} }

Corutine

Corutina este un program care comunică cu modulele adiacente ca şi cum acestea ar fi subrutine de intrare şi ieşire.Corutinele sunt la acelaşi nivel ierarhic fiecare executându-se ca şi cum ar fi programul principal fără ca să existe de fapt un program principal

Caracteristicile corutinelor

Concept bazat pe relaţii simetrice între subrutinedatele locale rămân nemodificate între momentul în care corutina pierde controlul şi momentul în care aceasta îl recapătăexecuţia corutinei este suspendată când pierde controlul procesorului şi nu se reia până când nu îşi recapătă acest controlSubrutinele se reiau de la locul în care au fost întrerupte

Caracteristicile corutinelor

controlul este explicit transferat de la o corutină la altamecanismul corutinelor este adesea numit cuasiparalelism

Implementarea corutinelor

Implementările simple se bazează pe interschimbarea adresei numărătorului de instrucţiuniImplementările mai complexe utilizează un dispecer– dispecerul menţine valorile numărătorului de

instrucţiuni pentru o listă de procese– execuţia este prin rotaţie (round-robin)– comunicare între procese se face prin intermediul

variabilelor globale

Exemplu

int proces_A() { int proces_B() {do doswitch (stareA) { switch (stareB) {

case 1: fazaA1; case 1: fazaB1;case 2: fazaA2; case 2: fazaB2;case 3: fazaA3; case 3: fazaB3;case 4: fazaA4; }} }

}unde : stareA şi stareB sunt stări ale numărătoarelor de adresă gestionate de dispecer

Exemplu

while(1){costate{ ... } // task 1

costate{ // task 2waitfor( buttonpushed() );turnondevice1();waitfor( DelaySec(60L) );turnondevice2();waitfor( DelaySec(60L) );turnoffdevice1();turnoffdevice2();}

costate{ ... } // task n}

Avantajele corutinelor

simple şi eficientesecvenţă predeterminată

– constrângerile pot fi îndeplinitenu necesită nucleu RTnu foloseşte preemţiunea

– activitatea suplimentară pentru comutare este redusă– nu necesită protejarea resurselor

modul de stabilire a secvenţei este la dispoziţia utilizatorului

Dezavantajele corutinelor

O corutină care îşi încheie execuţia determină terminarea execuţiei aplicaţieinu există o modalitate de verificare a îndeplinirii restricţiilor în momentul execuţieiexecuţia nu este strict periodică

Implementări asincrone

evenimentele sunt detectate de sistemele perifericeevenimentele sunt semnalizate prin întreruperiobservabilitatea condiţiei poate fi programatănu necesită nucleu RTse bazează pe procese sporadice

Avantajele sistemelor asincrone

nu necesită nucleu RTnu necesită scindarea proceseloruşor de implementattimp de răspuns mic

Dezavantajele sistemelor asincrone

secvenţele se bazează pe o prioritate a proceselor fixatăpreemţiunea implică:– activităţi suplimentare pentru salvarea şi

restaurarea contextului– necesitatea protejării resurselor comune

Sisteme bazate pe întreruperi

Pot folosi întreruperi:– Hardware şi software

cele software implică un ceas– Periodice

numite sisteme cu timp de execuţie constant– Aperiodice

numite sisteme sporadice– Mixte

numite sisteme hibrideDispecerizarea realizată de subrutine de tratare a întreruperilorContextul trebuie salvat

Sisteme hibride

folosesc timpul mort al procesorului pentru a executa procese utileexecută procese activate prin întreruperi în prim plan şi procese executate ciclic în fundalfolosesc extensia conceptului de corutine pentru a lua în considerare comportamentul asincron

Sistem de operare

Un sistem de operare (SO) este un program care realizează gestionarea resurselor hardware şi software ale unui calculatorUn SO realizează sarcini de bază cum ar fi:– controlul şi alocarea memoriei– gestionarea apelurilor către funcţiile sistem– controlul dispozitivelor de intrare şi ieşire– gestionarea comunicaţiilor– manipularea fişierelor

Sisteme de operare

În unele cazuri pune la dispoziţia utilizatorului o interfaţă grafică (Windows OS, MacOS)Constituie o platformă pentru alte programe sistem sau pentru programele de aplicaţii

Clasificare SO

după tehnologie– tip Unix– altele (DOS, Windows)

după tipul de licenţă– contra cost– gratuită

după stadiul de utilizare– ieşite din uz (CP-M, DOS)– în uz (Linux, Windows)

Clasificarea SO

după tipul de utilizare– uz general (GPOS) (Linux, Windows)– numai pentru calculatoare tip desktop (MS-DOS, MacOS)– numai pentru calculatoare de tip mainframe (VM)– pentru sisteme de timp real (RTOS)– pentru sisteme încapsulate (embedded)– pentru PDA

după scop– profesionale– pentru cercetare– hobby

Elemente comune GPOS şi RTOS

au un anumit grad de multiprocesaregestionează resursele hardware şi softwareoferă servicii programelor de aplicaţiiabstractizează partea hardware

Diferenţe între RTOS şi GPOS

fiabilitate mai mare a RTOSadaptarea mai bună la resursele aplicaţieiviteză de lucru mai marereducerea necesarului de memoriealgoritmii de planificare a proceselor adaptate aplicaţiilor RTsuport pentru sisteme înglobate fără disc (încărcarea din memoria ROM sau RAM)portabilitate mai bună pentru alte platforme hardware

RTOS

Un RTOS este un program care:– realizează o planificare a execuţiei programului

bazată pe constrângeri stricte de timp– gestionează resursele sistemului– oferă o bază consistentă pentru dezvoltarea

aplicaţiilor

Caracteristicile RTOS

RTOS pot fi de la foarte simple la foarte complicatesunt de obicei scalabile (permit adaptarea la resursele existente)poate conţine doar un nucleu sau poate fi o combinaţie de mai multe module

Structura unui RTOS

Majoritatea RTOS conţin:– Planificator– Obiecte RT– Servicii

Structura unui sistem cu RTOS

NucleuNucleu

Sistem de fişiere

Sistem de fişiere

Driveredispozitive

Driveredispozitive

Facilităţi de depanare

Facilităţi de depanare

Dispozitive I/O

Dispozitive I/O

Protocoalereţea

Protocoalereţea

Altecomponente

Altecomponente

RTOS

Programul de aplicaţieProgramul de aplicaţie

BSP (board support package)BSP (board support package)

Hardware-ul sistemului de implementareHardware-ul sistemului de implementare

Elementele unui RTOS

Planificatorul

Este elementul de bază al unui RTOSPe baza unor algoritmi stabileşte care este următorul proces care se execută

Obiectele

Construcţii specifice nucleului care permit programatorilor să creeze aplicaţii RTObiecte uzuale– procese– semafoare– cozi de mesaje– cutii poştale– evenimente– etc

Servicii

sunt operaţii pe care nucleul le execută asupra obiectelorServiciile pot fi:– temporizări– tratarea întreruperilor– gestionarea resurselor– gestionarea dispozitivelor periferice– gestionarea comunicaţiilor

Nuclee RT

Furnizează trei funcţii:– Planificarea proceselor– Dispecerizarea proceselor– Comunicarea între procese

Prezintă mai multe nivele– Nivelul aplicaţie– Nivelul mediului de execuţie– Nivelul sistemului de operare– Nivelul maşină– Nivelul hardware

Nucleul RT

Utilizatori

NanonucleuControlul proceselorGestionarea memoriei

MicronucleuPlanificarea proceselor

NucleuComunicare între procese şi sincronizare

ExecutivSuport pentru fişiere şi discSistemul de operareInterfaţa utilizator

Hardware

1

Programarea sistemelor de timp real

Planificare proceselor

Tipuri de procese

periodiceaperiodicehiperperiodicesporadice

Procese periodice

Utilizate pentru execuţia unor operaţiuni care se repetă la intervale egale de timp:– citirea datelor de la traductoare– reactualizarea unor variabile de stare– calcule ale unor algoritmi de control

Procese aperiodice

Sunt utilizate pentru a răspunde la solicitările:– operatorului– sistemului de comunicaţie– evenimente asincrone provenite din mediul în

care funcţionează sistemul RT

Procese hiperperiodice

Au specificată o anumită frecvenţă minimă, în anumite situaţii aceasta poate să creascăAlte procese pot întrerupe aceste procese însă fără ca frecvenţa de execuţie să scadă sub valoarea minimăCreşterea sau scăderea frecvenţei de execuţie este dată de încărcarea procesoruluiDuc la o mai mare utilizare a procesorului

Procese sporadice

Procesele sporadice sunt utilizate pentru a răspunde unor solicitări a căror apariţie nu se încadrează în una din categoriile de mai sus

Problema planificării

Procesele trebuiesc planificate pentru execuţie astfel încât să se respecte constrângerile de timpÎn funcţie de tipul sistemului RT (hard sau soft) termenele pot fi ferme sau lejereProcesele intră în execuţie în funcţie de evenimentele la care trebuie să reacţioneze sistemul

Problema planificării

Execuţia sistemului de procese trebuie să:– respecte termenele ferme în cazul sistemelor

hard– minimizeze anumite expresii temporale cum ar fi

întârzierile maxime în cazul sistemelor softDacă nu sunt respectate aceste condiţii se spune că sistemul:– nu funcţionează corect (sisteme hard)– funcţionează ineficient (sisteme soft)

Planificarea

Constă în ordonarea în timp a execuţiei proceselor care intră în componenţa sistemelor RTPlanificarea determină modul de alocare procesorului sau a altor resurse proceselor care se află în starea gata de execuţiePlanificarea trebuie să asigure respectarea cerinţelor temporale şi de performanţă impuse sistemului RT

Planificator

Planificatorul este o componentă a sistemului RT care realizează planificarea proceselor aflate în starea gata de execuţiePlanificatorul poate să fie parte a programului de aplicaţie sau poate să fie o componentă a RTOS

Obiectivele planificării

Sisteme RT hard: respectarea tuturor termenelor fermeSisteme RT soft: încadrarea întârzierilor în limitele întârzierilor maxime sau minimizarea sumei întârzierilorSisteme RT hibride (au atât termene ferme cât şi termene lejere): respectarea tuturor termenelor ferme şi încadrarea întârzierilor în limitele întârzierilor maxime sau minimizarea sumei întârzierilor

Activităţi de planificare

ConfigurareDistribuire– pornirea şi comutarea proceselor– întreruperea proceselor (dacă sistemul RT este

preemptiv)Analiză apriorică– poate o mulţime de procese să fie planificate date

fiind anumite constrângeri– Planificarea poate fi statică sau dinamică

Realizarea planificatorului

Un algoritm de planificare trebuie să ţină cont de:– existenţa termenelor de timp real şi tipul lor– parametrii (duratele de execuţie) proceselor sau a

subrutinelor care elaborează răspunsul– momentele de apariţie a evenimentelor sincrone– estimarea momentelor de apariţie a evenimentelor

asincrone– resursele partajate existente în sistem– urgenţa răspunsurilor– importanţa răspunsurilor– utilitatea răspunsurilor

În funcţie de aplicaţie vor fi luaţi în considerare doar unii din parametrii amintiţi mai sus

Realizarea planificatorului

Execuţia planificatorului consumă timpPlanificatorul concurează la resursele sistemului (timpul procesorului, memorie etc) cu celelalte procese ale sistemului RTExecuţia planificatorului poate să conţină execuţii la anumite intervale de timp sau când au loc anumite evenimenteExecuţia planificatorului va fi la rândul ei comutată similar cu execuţia celorlalte procese

Realizarea planificatorului

În oricare moment pot exista mai multe procese care sunt gata de execuţiePlanificatorul trebuie să stabilească o ordine totală sau parţială a execuţiei proceselorExemplu

– ordine totală: vor fi executate procesele cu prioritate cea mai mare (se presupune că fiecare proces are un nivel de prioritate unic)

– ordine parţială: vor fi executate procesele având durata cea mai mică. La un moment dat pot exista două procese care să aibă aceeaşi durată. Stabilirea unei ordonări între aceste procese se poate baza pe momentul intrării starea gata de execuţie.

Realizarea planificatorului

Unele sisteme RT permit alegerea algoritmului de planificare dând utilizatorului libertatea de a alege modul de planificare în funcţie de aplicaţieÎn unele sisteme algoritmul de planificare se poate modifica în timpul funcţionării sistemului.Realizarea unui sistem cu algoritm ce se modifică în timpul execuţiei ridică probleme tehnice.Sistemele RT realizează un compromis între costul planificatorului şi performanţele acestuia

Factori de influenţă a planificatorului

interacţiunea dintre componente şi proceseconcurenţa dintre planificator şi procesetipul proceselorduratele pentru elaborarea răspunsurilortimpul consumat pentru planificarevitezele relative ale proceselor

Interacţiuni între procese

PrecedenţăSincronizare mutualăExcluderePartajarea resurselorCombinaţie a celor anterioare

Arhitectura sistemului de planificare şi lansare în execuţie

Caracteristici temporale

Procese periodice– Tex(p) – durata de execuţie a procesului– Tpr(p) – perioada de execuţie a procesului– Condiţie: Tex<=Tpr– Tdd(p) + durata de la activare până la termenul

ferm sau termenul lejer– Deseori se consideră Tdd=Tpr

Caracteristici temporale

Procese hiperperiodice– Tex(p) – durata de execuţie a procesului– Tpr(p) – hiperperioada de execuţie a procesului– Condiţie: Tex<=Tpr– Deseori se consideră Tdd=Tpr

Caracteristici temporale

Procese sporadice– Tex(p) – durata de execuţie a procesului– Tms(p) – durata minimă între două cereri de

execuţie a procesului– Condiţie: Tex<=Tms– Tdd(p) – durata până la termenul ferm sau până

la termenul de efectuare a sarcinii din momentul activării lui

Caracteristici temporale

Un proces aperiodic nu are o durată minimă între două reactivări succesiveCererea de execuţie a unui proces aperiodic poate fi emisă în orice moment

Caracteristici temporale

Tex/Tms0∞Tex∞TmsSporadic

10∞Tex∞0 sau Tex

Aperiodic

1TexTexTexTexTexHiperperiodic

Tex/TprTex/Tpr2 Tpr-TexTprTprTprPeriodic

maxminmaxminmaxmin

Rata de execuţieDurata dintre 2 terminări succesive

Durata dintre 2 cereri succesive

Proces

Algoritmi de planificare

pentru procese independentepentru procese comunicantepentru procese cu relaţii de precedenţăcu partiţionarea proceselorfolosind algoritmi genetici

Algoritmi de planificare a proceselor independente

– după importanţa sarcinilor în sistem– după termene

prin ordonare după termene fermeprin ordonare după frecvenţăprin ordonare după termene lejere

– după ordinea de emitere a cereriiFIFO (first in first out)LIFO (last in first out)

– după durata de execuţieprin ordonarea după timpul de execuţieprin ordonarea după timpul liber

Algoritmi de planificare a proceselor comunicante

după importanţa sarcinilor prin alocarea statică a priorităţilorprin ordonarea după termenele ferme

– după frecvenţa proceselor comunicante– prin ordonarea după termenele ferme

parţial monotonă după frecvenţă parţial monotonă după importanţa sarcinilor

Algoritmi de planificare a proceselor cu relaţii de precedenţă

folosind grafuri serie- paralelcu alocarea resurselor

Algoritmul de planificare prin ordonare după frecvenţă

în engleză Rate Monotonic Scheduling (RMS)Ipoteze

– procese periodice– termenele limită sunt la sfârşitul perioadei– procesele sunt preemptive– procesele sunt gata de execuţie la începutul fiecărei

perioade– procesele nu se pot bloca sau suspenda singure– timpul de execuţie pentru fiecare proces este constant şi

cunoscut

Algoritmul de planificare prin ordonare după frecvenţă

procesele cu perioade mai mici vor avea prioritatea mai maretoate priorităţile vor fi diferite

Algoritmul de planificare prin ordonare după frecvenţă

Algoritmul de planificare prin ordonare după frecvenţă

Condiţia necesară– Suma(i=1,n)(Texi/Tpri)<=1

Condiţie suficientă– Suma(i=1,n)(Texi/Tpri)<=n(2^(1/n)-1)

n=1->100%, n=2->83%, n=3->78%, n mare->69%Când numărul proceselor este mare se garantează succesul planificării dacă utilizarea procesorului este mai mică de 69%31% din utilizarea procesorului este alocată îndeplinirii condiţiilor de timp real

1)()(

1

≤∑=

n

i i

ipTprpTex

)12()()(

1

1

−≤∑=

nn

i i

i npTprpTex

Avantajele algoritmului RMS

Este simpluSe poate implementa pe sistemele de operare existentePoate fi folosit pentru a aloca nivele de întrerupere

Dezavantajele algoritmului RMS

Ipotezele sunt restrictivePoate fi aplicat doar pentru procese preemptiveNu sunt indicate în cazul termenelor limită mai mici decât perioadaNu ia în considerare urgenţa răspunsurilorNu ia în considerare importanţa proceselor

Algoritmul de planificare prin ordonare după termene

în engleză Deadline Monotonic Scheduling(DMS)Ipoteze– procese sporadice– termenele limită sunt arbitrare Tddi< Tpri– procesele sunt preemptive– procesele nu se pot bloca sau suspenda singure– timpul de execuţie maxim pentru fiecare proces

este constant şi cunoscut

Algoritmul de planificare prin ordonare după termene

Algoritmul de planificare prin ordonare după termene

Trcd este timpul de răspuns cel mai defavorabilTin =interferenţa pentru cazul cel mai defavorabil:

– Tin=Suma(j=1,i-1)Ceil(Tddi/Texj).Texj

Testul care indică dacă procesele pot fi planificate este:

– Texi/Tddi+Tini/Tddi<=1pentru orice proces pi.

1)()()()(

1

1

=∑

=

i

jj

j

ii pTex

pTexpTddpTin

1)()(

)()(

≤+i

i

i

ipTddpTin

pTddpTex

Algoritmul de planificare prin ordonare după termene

Avantaje– Este simplu şi se poate implementa pe SO

existente– Pot fi utilizate pentru a aloca nivelele de

întrerupere– Eficient pentru procese periodice cu termene

limită reduse

Algoritmul de planificare prin ordonare după termene

Dezavantaje– Doar pentru procese preemptive– Nu pot trata excluziunea

1

Programarea sistemelor de timp real

Procese

Definiţie

o succesiune independentă de instrucţiuni care are alocate anumite resurse pentru execuţie

procesele concurează între ele pentru a fi executate de procesor şi pentru a accesa anumite resurse ale sistemului

descompunerea funcţionalităţii unui sistem în mai multe procese are avantajul optimizării tratării intrărilor şi ieşirilor

Caracteristici

Un proces este caracterizat de anumiţi parametri şi structuri de date

– nume– identificator unic (ID)– prioritate– bloc de control al procesului (TCB - task control bloc)– stivă– subrutină a procesului

Parametrii şi structurile de date formează obiectul proces

Parametrii şi structurile de date ale unui proces

int Proces1(){while (1) {actiune1;:actiunen;

}}

int Proces1(){while (1) {actiune1;:actiunen;

}}

TCB StivaNume

ID

Prioritate

Tipuri de procese

Procesele pot fi– procese sistem: create de RTOS

procese de iniţializare şi pornire a sistemuluiprocesul inactiv (idle)procesul generare a mesajelor sistemprocesul de tratare a excepţiilorprocesul de depanareprocesul de generare a semnalului de tact

– procese utilizator: create de utilizatordepind de aplicaţie

Procesul Idle

are prioritatea cea mai micăutilizează timpul liber al procesoruluide obicei este o buclă infinităasigură validitatea contorului de instrucţiuni (PC)poate fi înlocuit cu un proces definit de utilizator care să realizeze anumite acţiuni– ex. economisirea energiei prin suspendarea

procesorului

Nivele de prioritate

În funcţie de implementarea RTOS două procese pot avea acelaşi nivel de prioritate sau nivele de prioritate diferite.Numărul de nivele de prioritate este limitat Numărul de procese care pot avea acelaşi nivel de prioritate este limitat. Cele două de mai sus limitează numărul de procese care pot fi create în cadrul unei aplicaţii.Procesele sistem au de obicei rezervate anumite niveluri de prioritate, de cele mai multe ori acestea sunt din domeniul celor mai ridicate niveluri.

Crearea proceselor

Sarcinile utilizatorului– atribuirea unui nume– atribuirea unei priorităţi– stabilirea dimensiunii stivei– scrierea subrutinei procesului

Sarcinile RTOS– atribuirea unui ID unic– crearea blocului de control (TCB) asociat– alocarea memoriei pentru stivă

Stările unui proces

Fiecare proces se poate afla în una din mai multe stări posibile. Mulţimea de stări posibile în care se poate afla un proces depinde sistemul de operare de timp real.

Stările unui proces

starea activă sau în execuţie – este starea în care procesul este activ având prioritatea cea mai marestarea blocată – semnificaţia acestei stări depinde de sistemul de operare. În cazul anumitor sisteme ea poate îngloba şi stările de amânare şi de aşteptare;starea gata de execuţie – procesul este gata de execuţie însă nu are prioritatea necesară pentru a fi executat;

Stările unui proces

starea amânată – este starea în care procesul aşteaptă trecerea unei temporizăristarea suspendată – este o stare care este de obicei utilizată în scopul depanării sistemuluistarea de aşteptare – este starea în care procesul aşteaptă eliberarea unei resurse sau aşteaptă apariţia unui eveniment

Stările unui proces

starea de tratare a întreruperilor – este starea în care trece procesul la apariţia unei întreruperistarea adormită – este starea în care se poate afla un proces înainte de fi făcut disponibil sistemului de operare sau după ce a fost eliminat din cadrul aplicaţiei.

Evoluţia proceselor

Trecerea de la o starea la alta este implementată cu ajutorul noţiunii de automat finit. Structura acestuia şi regulile de evoluţie (tranziţiile) sunt caracteristice fiecărui RTOS în parte.

Stările proceselor

G – gata de execuţie, E – execuţie, B – blocată.

Stările proceselor

A – aşteptare, G – gata de execuţie, E – execuţie, S – suspendată sau

blocată.

Stările proceselor

A – aşteptare, E – execuţie, G – gata de execuţie, D – adormită, I – tratarea

întreruperilor

Starea gata de execuţie

La unele RTOS este starea în care sunt trecute procesele când sunt createÎn această stare procesul concurează la resursele procesorului împreună cu celelalte procese gata de execuţieDin această stare procesul poate trece doar în starea de execuţie

Starea de execuţie

În cazul sistemelor monoprocesor un singur proces poate fi executat la un moment datDin această stare procesul poate trece în:– starea gata de execuţie (nu şi-a terminat execuţia şi a fost întrerupt de un proces cu prioritate mai mare)

– starea blocată în situaţiilea cerut o resursă care nu este disponibilăa făcut un apel care necesită apariţia unui evenimenta făcut un apel la o funcţie de care introduce o întârziere a execuţiei

Starea blocată

Permite proceselor cu prioritate mai mică să fie executateProcesul trece în starea blocată în urma unui apel blocantProcesul rămâne în această stare până este valabilă condiţia de blocareLa deblocare procesul trece în– starea de execuţie (dacă are prioritatea cea mai

mare)– starea gata de execuţie în rest

Acţiuni asociate proceselor

crearea procesuluieliminarea procesuluiplanificarea procesuluiobţinerea de informaţii de la proces.

Crearea proceselor

Crearea proceselor se poate realiza– static - sunt create de către utilizator în momentul

creării programului de aplicaţienecesarul de memorie se alocă în momentul compilării programului

– dinamic - sunt create în momentul execuţiei programului de aplicaţie.

memoria se alocă dinamic, sunt utilizate în cadrul sistemelor care dispun de resurse de memorie importante.

Crearea proceselor

Procesele sunt create prin apelul la funcţiile sistemului de timp real specifice Nu întotdeauna crearea unui proces înseamnă şi că acesta este făcut imediat disponibil sistemului de operare. Uneori este necesar apelul unei funcţii speciale care să facă procesul disponibil sistemului. Situaţia mai este întâlnită şi în partea de pornire a sistemului care se realizează conform etapelor:

– mai întâi este creat un set de procese, – se iniţializează sistemul de operare de timp real, – procesele sunt făcute disponibile sistemului.

Crearea proceselor

Faptul că un proces este făcut disponibil sistemului de operare nu înseamnă neapărat că el este şi executat imediat. Procesul este executat imediat dacă are cel mai mare nivel de prioritate. În caz contrar, procesul este trecut în starea gata de execuţie.

Eliminarea proceselor

Efectul acţiunii de eliminare a unui proces depinde de RTOS. Procese create static – eliminarea unui proces = scoaterea acestuia din

evidenţa sistemului de operare – trece într-o stare numită de adormire, dar fără să

fie şterse elementele componente procesului (zona de memorie, partea de cod aferentă)

– în funcţie de necesităţile aplicaţiei, procesul respectiv poate fi refolosit (se poate schimba numele, identificatorul unic şi nivelul de prioritate)

Eliminarea proceselor

Procese create dinamic– eliminarea unui proces = scoaterea acestuia din

evidenţa sistemului de operare – poate presupune şi eliberarea resurselor folosite,

în special a zonei de memorie aferente

Eliminarea proceselor

Operaţia de eliminare a proceselor trebuie să fie utilizată cu mare atenţie. În cadrul execuţiei unui proces acesta poate dobândi anumite resurse ale sistemului. Eliminarea unui astfel de proces, fără a se asigura eliberarea tuturor resurselor poate duce la blocarea unor resurse ale sistemului sau chiar blocarea întregului sistem.

Planificarea proceselor

Planificare proceselor se face în mod normal automat prin intermediul algoritmului de planificarePe baza algoritmului de planificare procesele trec dintr-o stare în alta din cele amintiteRTOS pot oferi funcţii care să permită utilizatorului controlul trecerii proceselor dintr-o stare în alta

Planificare proceselor

Funcţii utilizator de control al stărilor proceselor– suspendare a unui proces– reluarea execuţiei unui proces– întârzierea unui proces– repornirea unui proces– modificarea priorităţii unui proces– blocarea şi deblocarea posibilităţii de întrerupere

a unui proces

Tipuri de subrutine ale proceselor

Codul executat în cadrul unui proces poate fi:– cu execuţie până la terminare

utilizat în cazul proceselor de iniţializare şi de pornirese execută o singură datăresursele sunt eliberate la terminarea procesului

– buclă infinită majoritatea proceselor unei aplicaţii RTse execută de un număr mare de ori

Proces cu execuţie până la terminare

ProcesExecutieTerminare() { Iniţializează aplicaţiaCrează procesele de tip buclă infinităCrează obiectele nucleuluiŞterge sau suspendă acest proces}

Proces cu execuţie până la terminare

Observaţii– procesele de iniţializare au prioritate mai mare

decât cele ale aplicaţiei propriu-zise– sunt scrise astfel încât să fie suspendata sau şterse la terminare

– de obicei resursele sunt eliberate pentru a fi puse la dispoziţia altor procese

Procese tip buclă infinită

ProcesBuclaInfinita () { Cod de iniţializarewhile (1) {

Corpul bucleiUnul sau mai multe apeluri blocante

} }

Procese tip buclă infinită

Observaţii– Aceste procese pot conţine cod de iniţializare

care este executat doar prima dată când este executat procesul

– În interiorul buclei infinite trebuie să existe apeluri blocante care să permită blocarea procesului şi execuţia proceselor cu prioritate mai mică

1

Programarea sistemelor de timp real

Semafoare

Definiţie

Este un obiect al unui nucleu/sistem de operarede timp real care poate fi achiziţionat de unul sau mai multe procese în vederea:

– sincronizării– excluderii mutuale de la accesul simultan la o anumită

resursă

Elemente caracteristice

Semafoarele sunt caracterizate prin următoarele elemente:– semafoarele au o anumită structură care poate

diferi de la un RTOS la altul;– sunt structuri globale astfel încât starea lor poate

fi afectată de către orice proces.

Elementele asociate

numeidentificator unicvaloare (număr binar sau natural)bloc de control al semaforuluilistă de procese asociate

Elementele asociate

Observaţii

Lista proceselor asociate unui semafor poate fi implementată:– ca o listă de tip FIFO– astfel încât să ţină cont de nivelul de prioritate al

proceselor asociate. Implementarea este specifică fiecărui sistem de operare de timp real.Se spune despre procese că iau în posesieun semafor sau îl eliberează

Clasificare

semafor binar – poate lua doar două valori;semafor numărător – poate lua mai multe valori;semafor cu excludere mutuală (mutex -mutual exclusive) – poate lua doar douăvalori dar are o serie de caracteristicispecifice cu ar fi asigurarea accesuluiexclusiv la o resursă (de unde şi numele).

Semafoare binare

pot lua două valori, 0 şi 1. semaforul are valoare 0 = indisponibil şi nu poate fi luat în posesie (acest lucru deoarece anterior a fost luat în posesie de un alt proces). semaforul are valoarea 1 = disponibil şi poate fi luat în posesie.

Observaţie: Semafoarele binare pot fi eliberate şi de către alte procese decât cele care le-au luat în posesie.

Semafoare binare

Semafoare numărătoare

poate lua mai multe valori. semaforul are valoarea 0 = semaforul indisponibil (nu poate fi luat în posesie)semaforul are valoarea >0 = semaforuldisponibil (poate fi luat în posesie)În funcţie de implementare, numărul de câte ori poate fi luat în posesie poate să fie limitat sau nelimitat.

Semafoare numărătoare

este utilizată interpretarea conform căreia un semafor numărător are un număr de elemente care pot fi luate în posesie. Semaforul numărător numără câte astfel de elemente mai sunt disponibile. Când nici un element nu mai este disponibil, valoarea numărătorului este 0 şi deci semaforul devine indisponibil.elementele semaforului pot să fie eliberate şi de către procese care nu au luat în posesie în prealabilun element al semaforului.

Semafoare numărătoare

Semafoare cu excludere mutuală

asemănătoare semafoarelor binare în sensul pot lua tot două valori au faţă de cele din urmă o serie de proprietăţi care le individualizează În funcţie de implementarea RTOS proprietăţile suplimentare pot fi:– proprietate exclusivă– recursivitate– control asupra eliminării proceselor– evitarea apariţiei inversiunii de prioritate

Semafoare cu excludere mutuală

Proprietatea asupra unui mutex este obţinută când un proces blochează mutex-ul luându-l în posesieUn proces pierde proprietatea asupra unui mutex când îl elibereazăCând un mutex este în posesia unui proces el nu poate fi deblocat de către alt proces

Semafoare cu excludere mutuală

Acţiuni asociate semafoarelor

Principalele acţiuni asociate semafoarelor sunt:creareaeliminarealuarea în posesieeliberareaştergerea listei proceselor asociateobţinerea de informaţii

Crearea semafoarelor

Crearea semafoarelor este diferită pentru tipuri diferite de semafoare. Apelurile pentru crearea acestora este specifică fiecărui tip de RTOSDiferenţe posibile:

– valoarea de iniţializaresemafoare binare/mutuale: 0 sau 1semafoare numărătoare:

– starea accesibiă/neaccesibilă– valoarea de iniţializare

– valoarea de iniţializare= valoarea maximă sau nu

Eliminarea semafoarelor

Constă în a şterge un anumit semafor din lista celor disponibile sistemului de operare. Stergerea poate să fie temporară sau definitivă.Ştergerea unui semafor poate să aibă efecte negative în cazul în care nu se asigură că resursa asociată acestuia nu a fost mai întâi eliberată.La eliminarea unui semafor, lista de proceseasociate (aflate în starea de aşteptare) estedesfiinţată. (toate procesele aflate în listă sunt deblocate)

Luarea în posesie a unui semafor

Operaţia este specifică fiecărui tip de semafor în parte. Dacă semaforul nu este disponibil, procesul interesat de semafor poate să se comporte în mod diferit în funcţie de cerinţele aplicaţieiVariantele posibile:

– procesul intră în starea blocată în care aşteaptă eliberarea semaforului;

– procesul intră în starea blocată pentru o perioadă de timp. În această perioadă semaforul poate sau nu deveni disponibil.

După luarea în posesie a semaforului sau după expirarea timpului, procesul este scos din lista proceselor asociate respectivului semafor, starea următoare a acestuia fiind stabilită de planificator în funcţie de starea celorlalte procese şi în funcţie de nivelul de prioritate al acestora.

– procesul îşi continuă execuţia indiferent dacă semaforul este accesibil sau nu.

Luarea în posesie a unui semafor

În cazul semafoarelor de excludere mutualărecursivă, semaforul poate fi luat în posesieîn mod repetat de către procesul care îlposedă. Această situaţie este necesară în cazul încare subprocese ale procesului ce deţinesemaforul necesită accesul la aceeaşiresursă.

Eliberarea semafoarelor

Semafoare binare/numărătoare– eliberarea semafoarelor poate fi realizată de către

oricare dintre procesele existente în sistem. Semafoarele de excludere mutuală – pot fi eliberate doar de către procesele care le-au

luat în posesie. – semaforul poate fi eliberat în mod repetat de către

procesul care l-a luat în posesie. Numărul de eliberări trebuie să fie egal cu numărul de luări înposesie

Golirea listei de procese în aşteptare

Situaţii posibileGolirea listei de procese înainte de eliminarea unui semafor. Realizarea unei sincronizări între procese.

Obţinerea de informaţii de la semafoare

Operaţia permite obţinerea de informaţii referitoare la următoarele elemente ale unui semafor: – informaţii legate de elementele de identificare:

nume, identificator unic;– informaţii legate de tipul semaforului şi valoarea

acestuia;– informaţii legate de procesele aflate în lista de

aşteptare

Utilizări tipice ale semafoarelor

sincronizarea unui proces în aşteptare, sincronizarea mai multor procese în aşteptare, sincronizare cu urmărirea credituluisincronizarea accesului la o resursă cu acces unic, sincronizarea resurselor partajabile recursivsincronizarea accesului la mai multe resurse partajabile

Sincronizare prin aşteptarea unui semnal

Sincronizare prin aşteptarea unui semnal

ProcAstept ( ){:

Ia în posesie semafor binar:

}

ProcSemnal ( ){:

Eliberează semafor binar:

}

Sincronizarea mai multor procese în aşteptare

Sincronizarea mai multor procese în aşteptare

ProcAsteptn ( ){:

Operaţii specificeIa în posesie semafor binar

: }

ProcSemnal ( ){:

Operaţii specificeGoleşte lista de aşteptare a semaforului

: }

Sincronizare cu urmărirea creditului

Sincronizare cu urmărirea creditului

ProcAstept ( ){:

Ia în posesie semafor numărător:

}

ProcSemnal ( ){:

Eliberează semafor numărător:

}

Sincronizare cu urmărirea creditului

Utilizat când viteza de execuţie a celor două procese este diferită (procesul semnalizator are viteză mai mare)Procesul semnalizator îşi poate continua execuţia numărând fiecare semnalizare efectuatăCând este deblocat, procesul în aşteptare îşi execută instrucţiunile cu viteza proprie. Semaforul numărător va fi decrementatMetoda este aplicabilă dacă semnalizarea se face în pachete astfel încât procesul în aşteptare să poată răspunde tuturor semnalelor

Sincronizarea accesului la o resursă cu acces unic

Sincronizarea accesului la o resursă cu acces unic

Metodă utilizată pentru accesarea exclusivă a unei resurseResursa poate fi:– locaţie sau zonă de memorie– structură de date– port de intrare/ieşire

Semaforul este creat cu starea iniţială având valoarea 1 (disponibil/deblocat)

Sincronizarea accesului la o resursă cu acces unic

Solicitant1 ( ){:

Ia în posesie semaforScrie sau citeşte resursăEliberează semafor

: }

Sincronizarea resurselor cu acces recursiv

Sincronizarea resurselor cu acces recursiv

Metodă utilizată când subrutine apelate dintr-un proces trebuie să aibă acces la aceeaşi resursă ca şi procesul respectiv.

Sincronizarea resurselor cu acces recursiv

Solicitant1 ( ){:

Ia în posesie mutexScrie sau citeşte resursăSubrutinaA()Eliberează mutex

: }SubrutinaA ( ){

: Ia în posesie mutexScrie sau citeşte resursăSubrutinaB()Eliberează mutex

: }

SubrutinaB ( ){:

Ia în posesie mutexScrie sau citeşte resursăEliberează mutex

: }

Sincronizarea accesului la mai multe resurse partajabile

Sincronizarea accesului la mai multe resurse partajabile

Solicitantn ( ){:

Ia în posesie semafor numărătorScrie sau citeşte resursăEliberează semafor numărător

: }

Sincronizarea accesului la mai multe resurse partajabile

Metoda este folosită când există mai multe resurse echivalenteSemaforul numărător este iniţializat cu valoarea egală cu numărul de resurse echivalente

1

Programarea sistemelor de timp real

Cozi de mesaje

Coadă de mesaje. Definiţie

Este un obiect al unui nucleu/sistem de operarede timp real prin intermediul căreia procesele pot trimite sau recepţiona mesaje în vederea:

– sincronizării– schimbării de informaţii uni sau bidirecţional

Elemente caracteristice

Cozile de mesaje sunt caracterizate prin următoarele elemente:– au o anumită structură care poate diferi de la un

RTOS la altul;– menţin temporar mesajele ceea ce permite

decuplarea proceselor (transmisia/recepţia mesajelor nu trebuie să se facă sincron).

Elementele asociate

numeidentificator uniclungimea coziilăţimea maximă a coziibloc de control al cozii2 liste de procese asociate– lista proceselor ce aşteaptă să trimită mesaje– lista proceselor ce aşteaptă să primească mesaje

capul şi capătul cozii

Elementele asociate

Observaţii

Memoria necesară este alocată de către RTOS în funcţie de parametrii furnizaţi de utilizator:

– lăţimea maximă a mesajului– lungimea cozii (numărul de mesaje ce pot fi memorate în

coadă). Alocarea memoriei se face din blocurile de memorie:

– disponibile întregului sistem – rezervate special

Procesele din listele de aşteptare sunt selectate pentru a trimite/primi un mesaj în funcţie de

– prioritate– ordonare după un model FIFO

Stările unei cozi de mesaje

Conţinutul mesajelor

poate lua mai multe valori. valoarea preluată de la un senzor, o imagine pentru a fi afişată pe ecran, un mesaj text ce trebuie afişat pe un LCD, codul obţinut la apăsarea unei taste de la o tastaturăpachet de date de trimis prin intermediul reţelei

Transmiterea mesajelor

dimensiunea maximă a mesajelor este stabilită la intiţializarepot apare două probleme– dimensiunea mesajele poate fi

fixă variabilă

– transmiterea mesajului presupune două operaţii de copiere a mesajului

expeditor -> coadă de mesajecoadă de mesaje -> destinatar

Transmiterea mesajelor

Transmiterea mesajelor. Soluţii

1. în coada de mesaje se va înscrie un pointerla mesaj

– avantajepermite transmiterea de mesaje de lungimi diferitecopierea va fi mai rapidă (se copie doar pointerul)

– dezavantajenecesită introducerea în mesaj a unor informaţii legate de lungimea mesajuluinecesită mecanisme de gestionare a mesajelor eterogene

2. utilizarea unor mesaje de dimensiuni mici

Acţiuni asociate cozilor de mesaje

Principalele acţiuni asociate cozilor de mesaje sunt:creareaeliminareagolirea cozii de mesajetrimiterea de mesajeemisia mesajelorrecepţionarea mesajelorobţinerea de informaţii legate de coada de mesaje

Crearea cozilor de mesaje

Cozile sunt structuri globale, nu aparţin unui anumit procesApelurile pentru crearea acestora este specifică fiecărui tip de RTOSDiferenţe posibile:– valorile de iniţializare

lungimea coziilăţimea maximă a cozii

– modul de preluare a mesajelor de către procesele în aşteptare (bazat pe prioritate, FIFO etc)

Eliminarea cozilor de mesaje

Constă în a şterge unei anumite cozi de mesaje din lista celor disponibile sistemului de operareStergerea poate să fie temporară sau definitivăŞtergerea unei cozi de mesaje poate să aibă efecte negative având în vedere faptul că mesajele existente în listă sunt şterseLa eliminarea unui cozi de mesaje, lista de proceseasociate (aflate în starea de aşteptare) estedesfiinţată (toate procesele aflate în listă sunt deblocate)

Golirea cozii de mesaje

Situaţii posibileGolirea cozii înainte de eliminarea acesteia. Realizarea unei sincronizări între procese.

Trimiterea de mesaje

Pot exista 2 modele:– FIFO - fiecare mesaj nou este aşezat la sfârşitul

cozii.– LIFO – fiecare mesaj nou este aşezat în capul

cozii

Transmiterea mesajelor. Model FIFO

Transmiterea mesajelor. Model LIFO

Transmiterea mesajelor

când coada de mesaje este plină procesul – nu se blochează (apelul întoarce un cod

de eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită

Aşteptare pentru transmiterea mesajelor. Model FIFO

Aşteptare pentru transmiterea mesajelor. Model LIFO

Deblocarea proceselor din lista de aşteptare la transmisie

blocare pe o durată limitată – procesul se deblochează când – devine disponibil o locaţie pentru un mesaj

în coadă– expiră timpul de aşteptare

blocare pe o durată nedefinită– devine disponibil o locaţie pentru un mesaj

în coadă

Emisia mesajelor

Emisia este operaţia de transmisie a unui mesaj către mai multe proceseNu toate RTOS au implementată operaţia de emisie

Recepţionarea mesajelor

se face în funcţie de modelul de aşteptare– LIFO– FIFO– prioritate

Recepţionarea mesajelor. Model FIFO

Recepţionarea mesajelor. Model FIFO

Recepţionarea mesajelor

când coada de mesaje este goală procesul – nu se blochează (apelul întoarce un cod

de eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită

Deblocarea proceselor din lista de aşteptare la recepţie

blocare pe o durată limitată – procesul se deblochează când – apare un mesaj în coadă– expiră timpul de aşteptare

blocare pe o durată nedefinită– apare un mesaj în coadă

Citirea mesajelor din coadă

Citirea se poate realiza în două moduri:– distructiv – mesajul citit din coadă este şters din

coadă– nedistructiv – mesajul citit rămâne în coadă

Obţinerea de informaţii de la coada de mesaje

Operaţia permite obţinerea de informaţii referitoare la următoarele elemente ale unei cozi de mesaje: – informaţii legate de elementele de identificare:

nume, identificator unic;– informaţii legate parametrii cozii (lungime, lăţime

maximă;– informaţii legate de procesele aflate în lista de

aşteptare

Utilizări tipice ale cozilor de mesaje

comunicare unidirecţională fără blocare, comunicare unidirecţională cu blocare, comunicare bidirecţională cu blocareemisie

Comunicare unidirecţională fără blocare

Comunicare unidirecţională fără blocare

ProcEmitator () {:

Trimite mesaj în coada de mesaje: } ProcDestinatar () { :

Citeşte mesajul din coada de mesaje: }

Comunicare unidirecţională fără blocare

p(ProcEmitator)<p(ProcDestinatar)– ProcDestinatar – se execută, citeşte mesajele şi se

blochează când coada e goală– când ProcEmitator trimite un mesaj, ProcDestinatar este

deblocat şi se execută din noup(ProcEmitator)>p(ProcDestinatar)

– ProcEmitator – trimite mesaje până se umple coada de mesaje şi se blochează

– ProcDestinatar – citeşte mesajele din coadă permiţând ProcEmitător să se execute şi să trimită noi mesaje

Comunicare unidirecţională cu blocare

Comunicare unidirecţională cu blocare

ProcEmitator () {:

Trimite mesaj în coada de mesajeIa în posesie semafor

: } ProcDestinatar () { :

Citeşte mesajul din coada de mesajeEliberează semafor

: }

Comunicare unidirecţională cu blocare

Permite confirmarea recepţiei fiecărui mesaj în parteConfirmarea se poate realiza cu ajutorul unui semafor binar

Comunicare bidirecţională cu blocare

Comunicare bidirecţională cu blocare tip client-server

Comunicare bidirecţională cu blocare tip client-server

Clientul trimite cererile prin coada de mesaje de transmisieServerul furnizează datele cerute prin intermediul cozii de recepţieSe pot realiza aplicaţii cu mai mulţi clienţi şi un server.

– coada de comenzi comună– fiecare client va fi servit prin intermediul unei cozi separate

ObservaţiiCele două cozi pot avea lăţimi maxime diferiteServerul va avea prioritate mai mare pentru a putea servi clientul cât mai rapid

Comunicare bidirecţională cu blocare

ProcEmitator () {:

Trimite mesaj în coada de emisie mesajeAşteaptă mesaj în coada de recepţie mesaje

: } ProcDestinatar () { :

Citeşte mesajul din coada de emisie mesajeTrimite mesaj în coada de recepţie mesaje

: }

Emisie

Emisie

ProcEmitator () {:

Trimite mesaj în coada de mesaje: } ProcDestn () { // n=1,2,3:

Citeşte mesajul din coada de mesaje: }

1

Programarea sistemelor de timp real

Cutii poştale

Cutie poştală. Definiţie

Este un obiect al unui nucleu/sistem de operarede timp real prin intermediul căreia procesele pot trimite sau recepţiona un mesaj în vederea:

– sincronizării– schimbării de informaţii uni sau bidirecţional

Elemente caracteristice

Cutiile poştale sunt caracterizate prin următoarele elemente:– au o anumită structură care poate diferi de la un

RTOS la altul;– o cutie poştală menţine temporar un mesajceea

ce permite decuplarea proceselor (transmisia/recepţia mesajelor nu trebuie să se facă sincron).

Elementele asociate

numeidentificator unicdimensiunea mesajuluibloc de control al cutiei poştale2 liste de procese asociate– lista proceselor ce aşteaptă să trimită mesaje– lista proceselor ce aşteaptă să primească mesaje

Elementele asociate

Observaţii

Memoria necesară mesajului poate fi alocată de către RTOS în funcţie de dimensiunea mesajului. Alocarea memoriei se face din blocurile de memorie:

– disponibile întregului sistem – rezervate special

Procesele din listele de aşteptare sunt selectate pentru a trimite/primi un mesaj în funcţie de

– prioritate– ordonare după un model FIFO sau LIFO

Stările unei cutii poştale

Conţinutul mesajelor

poate fi de diferite tipuri în funcţie de informaţia pe care o poartă: – valoarea preluată de la un senzor, – o imagine pentru a fi afişată pe ecran, – un mesaj text ce trebuie afişat pe un LCD, – codul obţinut la apăsarea unei taste de la o

tastatură– pachet de date de trimis prin intermediul reţelei

Transmiterea mesajelor

dimensiunea şi formatul mesajelor trebuie să fie agreat de ambele procese (expeditor şi destinatar) şi sunt stabilite la iniţializarepot apare două probleme

– dimensiunea şi formatul mesajelor pentru cutii poştale diferite pot

aceleaşi diferite

– transmiterea mesajului presupune două operaţii de copiere a mesajului

expeditor -> cutie poştalăcutie poştală -> destinatar

Transmiterea mesajelor

Transmiterea mesajelor. Soluţii

1. în cutia poştală se va înscrie un pointer la mesaj

– avantajepermite transmiterea de mesaje de lungimi diferitecopierea va fi mai rapidă (se copie doar pointerul)

– dezavantajenecesită introducerea în mesaj a unor informaţii legate de lungimea mesajuluinecesită mecanisme de gestionare a mesajelor eterogene

2. utilizarea unui mesaj de dimensiuni mici

Acţiuni asociate cutiilor poştale

Principalele acţiuni asociate cutiilor poştale sunt:creareaeliminarea cutiei poştaletrimiterea de mesajerecepţionarea mesajelorobţinerea de informaţii legate de cutia poştală

Crearea cutiilor poştale

Cutiile poştale sunt structuri globale, nu aparţin unui anumit procesApelurile pentru crearea acestora este specifică fiecărui tip de RTOSDiferenţe posibile:– valorile de iniţializare

mărimea mesajuluimodul de transmitere a mesajului

– modul de preluare a mesajelor de către procesele în aşteptare (bazat pe prioritate, FIFO etc)

Eliminarea cutiilor poştale

Constă în a şterge unei anumite cutii poştale din lista celor disponibile sistemului de operareStergerea poate să fie temporară sau definitivăŞtergerea unei cutii poştale poate să aibă efecte negative având în vedere faptul că mesajul existent în cutia poştală este ştersLa eliminarea unui cutii poştale, lista de proceseasociate (aflate în starea de aşteptare) estedesfiinţată (toate procesele aflate în listă sunt deblocate)

Transmiterea mesajelor

când cutia poştală conţine un mesaj procesul care vrea să trimită mesajul – nu se blochează (apelul întoarce un cod

de eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită

Aşteptare pentru transmiterea mesajelor. Model FIFO

Aşteptare pentru transmiterea mesajelor. Model LIFO

Deblocarea proceselor din lista de aşteptare la transmisie

blocare pe o durată limitată – procesul se deblochează când – cutia poştală devine goală– expiră timpul de aşteptare

blocare pe o durată nedefinită– cutia poştală devine goală

Recepţionarea mesajelor

se face în funcţie de modelul de aşteptare– LIFO– FIFO– prioritate

Recepţionarea mesajelor. Model FIFO

Recepţionarea mesajelor. Model FIFO

Recepţionarea mesajelor

când cutia poştală este goală procesul – nu se blochează (apelul întoarce un cod

de eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită

Deblocarea proceselor din lista de aşteptare la recepţie

blocare pe o durată limitată – procesul se deblochează când – apare un mesaj în cutia poştală– expiră timpul de aşteptare

blocare pe o durată nedefinită– apare un mesaj în cutia poştală

Citirea mesajelor din cutia poştală

Citirea se poate realiza în două moduri:– distructiv – mesajul citit din cutia poştală este şters

– nedistructiv – mesajul citit rămâne în cutia poştală

Obţinerea de informaţii de la cutia poştală

Operaţia permite obţinerea de informaţii referitoare la următoarele elemente ale unei cutii poştale: – informaţii legate de elementele de identificare:

nume, identificator unic;– informaţii legate dimensiunea mesajului;– informaţii legate de procesele aflate în lista de

aşteptare

Utilizări tipice ale cutiilor poştale

comunicare unidirecţională, comunicare unidirecţională cu confirmarea mesajului,comunicare bidirecţională cu blocareutilizarea cutiei poştale ca semafor binar

Comunicare unidirecţională

Comunicare unidirecţională

ProcEmitator () {:

Trimite mesaj în cutia poştală: } ProcDestinatar () { :

Citeşte mesajul din cutia poştală: }

Comunicare unidirecţională cu confirmarea primirii mesajului

Comunicare unidirecţională cu confirmarea primirii mesajului

ProcEmitator () {:

Trimite mesaj în cutia poştalăIa în posesie semafor

: } ProcDestinatar () { :

Citeşte mesajul din cutia poştalăEliberează semafor

: }

Comunicare bidirecţională

Comunicare bidirecţională

Se utilizează două cutii poştaleProcesul Proc1 trimite un mesaj prin cutia poştală CP1Procesul Proc2 răspunde procesului Proc1 prin intermediul cutiei poştale CP2Se pot realiza aplicaţii de tip client server dacă informaţiile transmise se pot încadra într-un mesajSe pot realiza aplicaţii cu mai mulţi clienţi şi un server.

– o CP comună– fiecare client va fi servit prin intermediul unei cutii poştale separate

ObservaţiiPrin cele două cutii poştale se pot transmite mesaje de tipuri şi dimensiuni diferite

Comunicare bidirecţională

Proc1 () {:

Trimite mesaj în cutia poştală CP1Aşteaptă mesaj în cutia poştală CP2

: } Proc2 () { :

Aşteaptă mesaj din cutia poştală CP1Trimite mesaj în cutia poştală CP2

: }

Utilizarea cutiei poştale ca semafor binar

Iniţializarea în starea disponibil: iniţializare cutie poştală cu mesajIniţializare în starea indisponibil: iniţializare cutie poştală fără mesaj

Utilizarea cutiei poştale ca semafor binar

ProcAstept ( ){:

Aşteaptă mesaj în cutia poştală:

}

ProcSemnal ( ){:

Trimite mesaj în cutia poştală:

}

ProcAstept ( ){:

Ia în posesie semafor binar:

}

ProcSemnal ( ){:

Eliberează semafor binar:

}

1

Programarea sistemelor de timp real

Conducte

Conductă. Definiţie

O conductă (pipe) este un obiect al unui nucleu/sistem de operare de timp real prin intermediul căreia procesele pot transmite sau recepţiona informaţii într-un format nestructurat:

– sincronizării– schimbării de informaţii uni sau bidirecţional

Elemente caracteristice

Conductele sunt caracterizate prin următoarele elemente:– au o anumită structură care poate diferi de la un

RTOS la altul;– o conductă menţine temporar informaţia

nestructurată ceea ce permite decuplarea proceselor (transmisia/recepţia informaţiei nu trebuie să se facă sincron).

Elementele asociate

numeidentificator unicdimensiunea memoriei alocate conducteibloc de control al conductei

– număr de octeţi– tamponul– mărimea tamponului– poziţia de scriere– poziţia de citire

2 liste de procese asociate– lista proceselor ce aşteaptă să trimită informaţii– lista proceselor ce aşteaptă să primească informaţii

Elementele asociate

Observaţii

Memoria necesară conductei poate fi alocată de către RTOS. Alocarea memoriei se face din blocurile de memorie:

– disponibile întregului sistem – rezervate special

Procesele din listele de aşteptare sunt selectate pentru a trimite/primi informaţii în funcţie de

– prioritate– ordonare după un model FIFO sau LIFO

Stările unei conducte

Caracteristicile informaţilor vehiculate

informaţia vehiculată prin conductă este nestructuratăschimbul de informaţii se face la nivel de octeţiinformaţiei nu i se poate modifica prioritatea (anumiţi octeţi să fie scrişi/citiţi înaintea altoratipuri de informaţii vehiculate prin conducte:

– informaţii preluate de la un senzor, – o imagine pentru a fi afişată pe ecran, – octeţii corespunzători unui text ce trebuie afişat pe un LCD, – date de trimis prin intermediul reţelei

Conducte cu sau fără nume

conductele pot primi un nume la creare– pot fi utilizate de mai multe procese care vor

utiliza numele ca referinţăse pot crea conducte fără nume– pot fi accesate doar de către procesele între care

au fost create şi numai prin intermediul unor descriptori utilizaţi în cadrul RTOS

Acţiuni asociate conductelor

Principalele acţiuni asociate conductelor sunt:creareaeliminarea conducteitrimiterea de informaţiicitirea informaţiilorgolirea conducteiselecţie a conductei (dintre mai multe)obţinerea de informaţii legate de conductă

Crearea conductelor

Conductele sunt structuri globale, nu aparţin unui anumit procesApelurile pentru crearea acestora este specifică fiecărui tip de RTOSDiferenţe posibile:

– valorile de iniţializaredimensiunea memoriei tamponcu nume sau fără nume

La crearea conductei RTOS întoarce doi descriptori:– punctul de scriere a informaţiei– punctul de citire a informaţiei

Eliminarea conductelor

Constă în a şterge unei anumite conducte din lista celor disponibile sistemului de operareŞtergerea poate să fie temporară sau definitivăŞtergerea unei conducte poate să aibă efecte negative având în vedere faptul că informaţia existentă în conductă este ştearsăLa eliminarea unui conducte, lista de procese asociate (aflate în starea de aşteptare) este desfiinţată (toate procesele aflate în listă sunt deblocate)

Transmiterea informaţiei

se poate face folosind descriptorul ce indică capătul de scriere al conducteiconducta poate fi alimentată de mai multe procesecând conducta este plină procesul care vrea să trimită informaţii prin conductă: – nu se blochează (apelul întoarce un cod de

eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită

Deblocarea proceselor din lista de aşteptare la transmisie

blocare pe o durată limitată – procesul se deblochează când – există spaţiu pentru a scrie informaţi în

conductă– expiră timpul de aşteptare

blocare pe o durată nedefinită– există spaţiu pentru a scrie informaţi în

conductă

Citirea informaţiei din conductă

se poate face folosind descriptorul ce indică capătul de citire al conducteiun proces poate să citească într-o singură operaţie de citire informaţia dintr-o conductă scrisă de mai multe procesecantitatea de informaţie citită este dată de blocul de control al conductei

Citirea informaţiei din conductă

când conducta este goală procesul: – nu se blochează (apelul întoarce un cod

de eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită

Deblocarea proceselor din lista de aşteptare la recepţie

blocare pe o durată limitată – procesul se deblochează când – apare informaţie în conductă– expiră timpul de aşteptare

blocare pe o durată nedefinită– apare informaţie în conductă

Citirea informaţiei din conductă

în cazul conductelor citirea este distructivă (nu se pot realiza operaţii de emisie)toţi octeţii de informaţie din conductă au aceeaşi prioritatenu poate fi identificată sursa informaţiei (în cazul surselor multiple)

Golirea conductei

Situaţii posibileGolirea conductei înainte de eliminarea acesteia. Realizarea unei sincronizări între procese.

Selecţia

este acţiunea ce permite selectarea unei conducte în funcţie de apariţia unei anumite condiţiioperaţia de selecţie poate fi utilizată atât la scriere cât şi la citire

Selecţie

Obţinerea de informaţii despre conductă

Operaţia permite obţinerea de informaţii referitoare la următoarele elemente ale unei conducte: – informaţii legate de elementele de identificare:

nume, identificator unic;– informaţii legate de lungimea conductei;– informaţii legate de procesele aflate în listele de

aşteptare

Utilizări tipice ale conductelor

comunicare unidirecţională, comunicare bidirecţionalăcomunicare multi sursă la intrare şi ieşiresincronizarea proceselor

Comunicare unidirecţională

Comunicare unidirecţională

ProcEmitator () {:

Trimite informaţie prin conductă : } ProcDestinatar () { :

Citeşte informaţie din conductă : }

Comunicare bidirecţională

Comunicare bidirecţională

Proces1 () {:

Trimite informaţie în conducta C1 Aşteaptă informaţie în conducta C2

: } Proces2 () { :

Aşteaptă informaţie în conducta C1Trimite informaţie în conducta C2

: }

Comunicare multi sursă la intrare şi ieşire

Sincronizarea proceselor

Se utilizează două conducte– o conductă pentru transmiterea informaţiilor– o conductă pentru confirmarea recepţiei

informaţiilor

Sincronizarea proceselor

1

Programarea sistemelor de timp real

Semnale, evenimente, variabile condiţionale

Semnale. Definiţie

Un semnal este o întrerupere software care este generată atunci când apare un eveniment.Semnalul face ca execuţia procesului curent să fie întreruptă şi lansează în execuţie procesul ce tratează întreruperea

Semnale şi întreruperi

întreruperile sunt generate de apariţia unui semnal la una din intrările sistemuluisemnalele sunt generate de către anumite porţiuni de cod ale aplicaţiei (procese)

Elemente caracteristice

Semnalele sunt caracterizate prin următoarele elemente:– au o anumită structură care poate diferi de la un

RTOS la altul– numărul şi tipurile de semnale depind de

implementarea RTOS– sunt asincrone (nu sosesc la momente

determinate de timp)– pot fi generate de subrutine de tratare a

întreruperilor sau de către alte procese – sunt asociate unor evenimente

Particularităţi privind implementarea semnalelor

Implementările semnalelor pot sau nu beneficia de:– aşezarea în coadă a semnalelor (semnalul nou de acelaşi

tip suprascrie vechiul semnal)– numărarea semnalelor (semnale multiple de acelaşi tip au

acelaşi efect cu trimiterea unui singur semnal)– transmiterea de informaţii prin intermediul semnalelor– ordonarea transmiterii semnalelor (semnale diferite au

aceeaşi prioritate)– garantarea momentului transmisiei semnalelor când se

realizează o deblocare a unor semnale blocate în prealabil

Elemente caracteristice

evenimentele generatoare pot fi:– intenţionale – un proces semnalizează un

eveniment unui alt proces– neintenţionale – semnalul apare datorită apariţiei

unei instrucţiuni ilegale

Elemente asociate

Blocul de control al semnalelor– lista semnalelor acceptate– lista semnalelor în aşteptare– lista semnalelor ignorate– lista semnalelor blocate

Elemente asociate

Elemente asociate

Acţiuni asociate semnalelor

instalarea subrutinei de tratare a unui semnaldezinstalarea subrutinei de tratare a unui semnaltrimiterea unui semnalignorarea unui semnalblocarea unui semnaldeblocarea unui semnal

Utilizările tipice ale semnalelor

post prelucrarea unei întreruperi tratată de o subrutină de tratarea a întreruperilorsincronizare între procese

Post prelucrarea unei întreruperi

Sincronizarea proceselor

Evenimente

Evenimente. Definiţie

Evenimentele sunt semnale având ca sursă apariţia anumitor condiţii la intrările sistemului sau în funcţionarea internă a acestuia

Elemente caracteristice evenimentelor

Implementarea evenimentelor este dependentă de sistemul de operaresunt grupate de obicei într-un registru de evenimente având lungimea de 8, 16 sau 32 biţimai sunt denumite şi indicatori (flags)indicatorii asociaţi evenimentelor pot fi modificaţi de către alte procese sau subrutine de tratarea întreruperilor

Elemente caracteristice evenimentelor

pot fi părţi componente ale structurii de date ale unui proces sau pot fi structuri separateaplicaţiile definesc evenimentele asociate unui anumit indicator (bit dintr-un registru de evenimente)

Elemente asociate evenimentelor

registrul de control al evenimentelor conţine:– evenimente acceptate– evenimente primite– valoarea datei de expirare– condiţiile de notificare

registrul de evenimente

Elemente asociate evenimentelor

Elemente asociate evenimentelor

Acţiuni asociate evenimentelor

Trimiterea/Semnalarea unui evenimentRecepţionarea/Luarea la cunoştinţă de apariţia unui eveniment

Semnalarea unui eveniment

Operaţia permite unei surse externe să trimită un semnal unui procesSursă externă– proces– subrutină de tratare a întreruperilor

Printr-o singură operaţie pot fi semnalate mai multe evenimente

Recepţionarea unui eveniment

permite unui proces recepţionarea unor evenimente provenite din surse exterioarepermite stabilirea timpului de aşteptare pentru un anumit evenimentse pot specifica anumite condiţii care să ia în considerare mai multe evenimente (chiar dacă nu sunt simultane).

Recepţionarea unui eveniment

condiţiile pot fi construite folosind operatorii binari SI/SAUcondiţie SAU – reluarea execuţiei are loc dacă oricare din indicatori este 1condiţie SI – reluarea execuţiei are loc dacă fiecare indicator din setul asociat condiţiei este 1

Utilizări tipice ale evenimentelor

sincronizare unidirecţională a proceselor

Observaţii

unui eveniment nu i se poate ataşa o anumită informaţienu există mecanisme de acumulare a evenimentelor (efectul semnalării unui eveniment este acelaşi cu cel al semnalării mai multor evenimente de acelaşi fel).nu are un mecanism prin care să fie identificată sursa evenimentului

1

Programarea sistemelor de timp real

Întreruperi şi excepţii

Excepţii. Definiţie

Un eveniment care întrerupe funcţionarea normală a procesorului şi îl forţează să execute un set de instrucţiuni într-o stare specială

Excepţii. Clasificare

Sincrone – generate de obicei de evenimente interne procesorului

– împărţire prin zero– erori de scriere/citire a memoriei– indicator de gardă

Asincrone – generate de evenimente externe procesorului, de obicei generate de dispozitive hardware

– buton de reset– convertor A/N– controler comunicaţie

Întrerupere. Definiţie

Întreruperea este un caz particular de excepţie corespunzătoare unui eveniment având o cauză externă procesorului, de obicei un dispozitiv hardware.

Caracteristici ale excepţiilor

Sunt elemente necesare în cadrul RTOSImplementarea excepţiilor este specifică RTOS (în general dictată de modalitatea de implementare în cadrul procesorului)Implică reguli stricte de scriere a codului care utilizează întreruperile

Utilitatea excepţiilor

Tratarea erorilor şi a condiţiilor speciale de gestionare a resurselorGestionarea dispozitivelor concurenteGestionarea cererilor de servicii

Tratarea erorilor şi a condiţiilor speciale

Sunt tratate o serie întreagă de erori şi se permite sistemului revenirea din această stare fără oprirea şi resetarea sistemului

– Erori:împărţire prin 0depăşirea capacităţii de numărareeroare matematicăeroare de citire/scriere a memorieiinvocarea unor dispozitive inexistente sau neiniţializate

– Condiţii specialeîncercarea execuţiei unor instrucţiuni care pot fi executate numai în anumite moduri de lucru al procesoruluiutilizarea modului ICD (in circuit debugger)

Tratarea erorilor şi a condiţiilor speciale

Execuţia procesului este oprităSe lansează în execuţie o subrutină de tratare a excepţieiSe evaluează şi se tratează corespunzător eroarea

Gestionarea dispozitivelor concurente

Sistemele RTOS pot conţine dispozitive care pot funcţiona simultanDispozitivele pot necesita minim de intervenţie din partea procesoruluiDispozitivele trebuie să semnaleze procesorului anumite evenimente

– încheierea unei acţiuni– depăşirea sau coborârea sub un prag limită– îndeplinirea unei condiţii

Exemple:– încheierea unei conversii A/N– încheierea unei temporizări– coborârea tensiunii de alimentare sub pragul limită– umplerea unei zone tampon (buffer) de date

Gestionarea cererilor de servicii

Dispozitivele periferice pot fi considerate ca dispozitive care cer anumite servicii procesorului central– preluarea unei valori din zona aferentă

rezultatului conversiei– preluarea unor date dintr-o zonă tampon de

recepţie a datelor– permiterea accesului pentru citirea/scrierea

unor date din/în memoria sistemului

Clasificarea excepţiilor

Asincrone nemascabileAsincrone mascabileSincrone preciseSincrone imprecise

Ordinea uzuală a priorităţilor este– Cea mai mare Asincronă nemascabilă– Mare Sincronă precisă– Medie Sincronă imprecisă– Mică Asincronă mascabilă

Excepţii asincrone nemascabile

Sunt excepţiile care nu pot fi mascateEle sunt tratate imediat ce sunt recepţionateUnele procesoare au linii dedicate excepţiilor nemascabile

Excepţii asincrone mascabile

Sunt excepţiile care pot fi mascateExcepţiile mascate nu sunt luate în considerare de către procesorMascarea se realizează prin instrucţiuni dedicate ale procesorului

Excepţii sincrone precise

Sunt excepţii generate de evenimente interne ale procesoruluiInstrucţiunea care a generat excepţia este pe deplin identificată prin conţinutul numărătorului de programRevenirea din subrutina de tratarea excepţiei este cunoscută

Excepţii sincrone imprecise

Instrucţiunea care a generat evenimentul nu este cunoscutăSunt caracteristice procesoarelor de tip pipeline

Sistemul de priorităţi ale sistemului

Tratarea excepţiilor

Pentru a putea fi tratate, pentru fiecare excepţie trebuie prevăzută o subrutină care să ia în considerare excepţia respectivăAlocarea unei subrutine pentru o excepţie se realizează prin intermediul unei tabele vectoriVectorii reprezintă locaţii de memorie care conţin adresele de început a codului subrutinei de tratare a excepţieiLocalizarea, dimensiunea şi caracteristicile tabelei de vectori este specifică fiecărui procesor sau sistem de operare

Instalarea subrutinelor de tratare a excepţiilor

În general procesoarele au instalate subrutine standard de tratare a excepţiilor care realizează:

– sesizarea apariţiei întreruperii– tratarea minimă a excepţiei– întoarcerea din subrutina de tratare a excepţiei

Utilizatorii pot să creeze subrutine de tratare a excepţiilor şi să le instaleze modificând vectorul corespunzător excepţieiInstalare noii subrutine = in tabela de vectori se înlocuieşte vectorul (adresa) subrutinei standard cu vectorul (adresa) noii subrutine

Instalarea subrutinelor de tratare a excepţiilor

Tratarea excepţiilor

La apariţia unei excepţii trebuie parcurşi următorii paşi:– salvarea stării curente a procesorului– încărcarea adresei codului funcţiei de tratarea

a excepţiei în numărătorul de program– execuţia funcţiei de tratare a excepţiei– restaurarea stării procesorului– reluarea execuţiei programului ce se executa

înaintea apariţiei excepţiei

Tratarea excepţiilor

Determină sursa excepţiei

Salvează starea

ESR 1 ESR i

Selectează subrutina de tratare a excepţiei

ESR n

Restaurează starea

Activează excepţiile

Dezactivează intreruperile

Funcţia de tratare a excepţiei

O funcţie de tratare a unei excepţii realizează de obicei următoarele operaţiuni

– comută execuţia într-o zonă de memorie dedicată– salvează informaţii suplimentare despre starea procesorului– se dezactivează sistemul de întreruperi (unele procesoare îşi

dezactivează sistemul de întreruperi la acceptarea unei întreruperi), sau se maschează anumite niveluri de întrerupere, (de obicei cele cu prioritate mai mică);

– execută o serie minimă de instrucţiuni de tratare a excepţiei– se reactivează sistemul de întreruperi, sau se elimină măştile

anumitor niveluri;– se dă din nou controlul procesorului procesului întrerupt,

după ce în prealabil s-a încărcat starea lui.

Tratarea excepţiilor

Nivele de imbricare a excepţiilor

Este o situaţie curentă ca în timpul tratării unei excepţii să apară o altă excepţie

– Cazul 1 – dacă noua excepţie este de prioritate mai mică ea va fi ignorată (mascare)

– Cazul 2 – dacă noua excepţie este de prioritate mai mare ea trebuie să poată întrerupe subrutina de tratare curentă

Modul de imbricare a excepţiilor şi numărul maxim de imbricări este specific fiecărui RTOS/procesorNumărul maxim de imbricări depinde de obicei de dimensiunea memoriei stivă

Imbricarea excepţiilor

Imbricarea excepţiilor

Memoria stivă trebuie să fie destul de mare ca în ea să poată fi salvate toate informaţiile necesare la apariţia fiecărei excepţiiTrebuie luat în calcul şi necesarul din memoria stivă cerut de apelurile de funcţiile/procesele aplicaţieiÎn cazul în care nu se foloseşte un controler de memorie se poate depăşi stiva alocată aplicaţiei

Depăşirea memoriei alocate stivei

Depăşirea memoriei alocate stivei . Soluţii

Creşterea dimensiunii stivei fiind luat în calcul cazul cel mai defavorabil– avantaje: metodă simplă– dezavantaj: alocare neeconomică a memoriei

Alocarea unor zone de stivă speciale pentru întreruperi şi excepţii– avantaje: utilizare unei cantităţi mai mici de

memorie– dezavantaj: mecanism suplimentar de gestionare

a stivei suplimentare

Subrutinele de tratare a excepţiilor

Rutinele pentru tratarea excepţiilor pot să cuprindă ele însele toate activităţile implicate de cauzele care au generat excepţiile. Trebuie rezolvată situaţia în care soseşte o cerere de excepţie pe un nivel prioritar celui servit la un moment dat. Rutina care tratează o nouă excepţie nu "ştie" dacă întrerupe un proces, sau o subrutină pentru tratarea unei excepţii.

Subrutinele de tratare a excepţiilor

void subrutină_întrerupere() { Dezactivează sistemul de excepţii, dacă nu este

dezactivat automat; Salvează registrele procesorului; Reactivează sistemul de excepţii;

Executa secvenţa de instrucţiuni implicată de evenimentul care a întrerupt:

Reintroduce secvenţa întreruptă în execuţie prin încărcarea registrelor salvate;

}

Subrutinele de tratare a excepţiilor

Activitatea subrutinei pentru tratarea unei excepţii se poate rezuma la activarea unui procesProcesul activat efectuează activităţile implicate de tratarea întreruperii. Procesul care trebuie activat se află în aşteptare, iar rutina pentru tratarea întreruperii îl trece în starea "gata de execuţie" folosind un apel de sistem.

Subrutinele de tratare a excepţiilor

void subrutină_întrerupere() { Salvează starea procesului curent;

Introduce procesul curent în lista "gata de execuţie “; Semnalizează procesul implicat de evenimentul care

a întrerupt;/* aceasta va reactiva procesul corespunzător */

Execută funcţia planificatorului; Execută funcţia distribuitorului lansând în execuţie

primul proces din lista "gata de execuţie";}

1

Programarea sistemelor de timp real

Gestionarea memoriei

Probleme legate de fragmentarea memoriei

Fragmentarea memorieiActivitate suplimentară legată de gestionarea memorieiTimp de alocare a memoriei nedeterminist

Alocarea dinamică a memoriei

Memoria unei aplicaţii RTOS este împărţită în mai multe zone– memoria de program– memoria de date– memoria stivă– memorie liberă

Memoria liberă poate fi alocată dinamic de către aplicaţia RTOS

Alocarea memoriei

Caracteristici– Memoria este împărţită în blocuri de dimensiuni

egale.– Dimensiunea blocurilor depinde de sistemul de

operare– Alocarea memoriei se face la nivel de bloc– Informaţia legată de blocurile alocate este păstrată

într-o tabelă de alocare a memoriei

Blocul de control al memoriei

Informaţia stocată în BCM– adresa de bază a blocului fizic de memorie folosit

pentru alocare dinamică– dimensiunea totală a memoriei– tabela de alocare ce indică zonele de memorie

alocate şi zonele libere

Alocarea memoriei

Alocarea şi eliberarea memoriei se realizează folosind funcţii speciale– malloc – alocarea memoriei. Parametrul funcţiei

este dimensiunea memoriei (in octeţi sau kiloocteţi– free – eliberarea memoriei. Parametrul funcţiei

este obiectul sau un pointer către obiectul pentru care este alocată memoria

Alocarea se face în funcţie de dimensiunea precizată şi de dimensiune blocurilor de alocare

Alocarea memoriei. Exemplu

Dimensiunea blocului de alocare: 32 octeţiDimensiunea memoriei cerute: 60 octeţiInstrucţiunea de alocare: malloc(60);Memoria alocată: 2 blocuri de 32 octeţi = 64 octeţiMemoria nefolosită din cea alocată: 64+60=2 octeţiAcest tip de fragmentare se numeşte fragmentare internă

Alocarea memoriei. Exemplu

Fragmentarea memoriei

În urma unor operaţii repetate de alocare şi eliberare a memoriei rezultă zone de memorie având caracteristicile:– izolate– de dimensiune mică

Aceste zone nu pot fi folosite în cazul unor instrucţiuni care cer alocarea unei zone mai mari de memorie Acest tip de fragmentare se numeşte fragmentare externă

Alocarea memoriei. Exemplu

Defragmentarea memoriei

Blocurile de memorie izolate sunt mutate astfel încât să alcătuiască o zonă contiguăEficienţa operaţiei de defragmentare depinde de:– viteza de mutare a blocurilor– încărcarea sistemului (numărul de procese ale

aplicaţiei)– dimensiunea blocurilor de memorie

Alocarea memoriei. Exemplu. După defragmentare

Defragmentarea memoriei

Operaţia de defragmentare se realizează în mai mulţi paşiDupă mutarea a două blocuri, blocul rezultat poate fi de asemeni prea mic pentru un apel de alocarePe timpul fragmentării procesele nu pot accesa zonele de memorie alocate lor (acestea se pot afla în operaţia de mutare)Procesul de defragmentare concurează şi el la resursele sistemului ca şi orice alt procesPrioritatea procesului de defragmentare este de obicei mai mică decât a proceselor aplicaţiei

Defragmentarea memoriei

Restricţii impuse defragmentării:– blocurile care sunt accesate prin intermediul

adreselor fizice nu pot fi mutate– trebuie să fie respectate condiţiile de aliniere a

adreselor de memorie

Gestionarea memoriei

Un gestionar de memorie trebuie să realizeze cu rapiditate operaţiile

– determinarea un bloc liber de memorie de dimensiunea cerută sau mai mare (parte a funcţiei malloc)

– actualizarea informaţiei legate de memorie (parte a funcţiilor malloc şi free)

– determinarea posibilităţii de a combina blocul eliberat cu altele pentru a obţine o zonă contiguă de dimensiune mai mare

– să minimizeze activitatea suplimentară legată de gestioareamemoriei

Eficienţa gestionarului de memorie este determinată de structura tabelei de alocare a memoriei

Utilizarea blocurilor de memorie de dimensiune fixă

Zona de memorie este împărţită în grupuri (pools) de blocuri de memoriefiecare bloc de memorie dintr-un grup are aceeaşi dimensiunegrupurile conţin blocuri de dimensiuni diferiteFiecare grup este controlat de un bloc de control care deţine informaţiile:– dimensiunea unui bloc– numărul total de blocuri disponibile– numărul de blocuri libere

Blocuri de memorie

Structura memoriei

Fiecare grup este constituit dintr-o număr de blocuri de memorie organizate într-o listăLa o operaţie de alocare reuşită, blocul de memorie este eliminat din listăLa eliberarea unui bloc de memorie acesta este adăugat în lista grupului corespunzător dimensiunii luiO operaţie de alocare sau de eliberare poate elimina sau adăuga mai multe blocuri în listele grupurilor

Alocarea blocurilor de memorie

Alocarea blocurilor de memorie– grupurile sunt ordonate în funcţie de dimensiunea

blocurilor– la cererea unei zone de memorie de o anumită

dimensiune se caută blocul de dimensiunea cea mai mică dar mai mare sau egală cu dimensiunea cerută

Acţiuni:– se caută grupul cu dimensiunea cea mai mică– se caută primul bloc liber din listă

Alocarea blocurilor de memorie

Avantaje:– reduce fragmentarea internă a memoriei– îmbunătăţeşte performanţele aplicaţiilor cu

caracteristici statice:lucrează în medii predictibilenumăr cunoscut de procese createcunoaşterea de la început dimensiunii blocurilor de memorie

– are un comportament determinist (timpul de alocare este constant)

– nu necesită restructurare (defragmentare)

Sisteme RTOS cu memorie redusă

Dimensiunea memoriei impusă de restricţii de– preţ dispozitivelor de memorie– gabarit– consum de energie– cost suplimentar dat de gestionarul de memorie

Memoria este partajată între procesele sistemuluiPot apare momente când nu există memorie disponibilă (disponibilitate temporară)Unele procese vor aştepta eliberarea unor blocuri de memorie ca să poată continua execuţia

Sisteme RTOS cu memorie redusă

Acţiunea executată de un proces când cererea de memorie nu poate fi alocată depinde de implementarea RTOSAcţiuni– procesul se blochează pe o durată limitată– procesul se blochează pe un timp nedefinit– procesul îşi continuă execuţia

Implementarea alocării memoriei cu blocare

Implementarea foloseşte obiecte RTOS– semafor numărător– mutex

Obiectele permit sincronizarea operaţiei de alocare a memorieiÎn cazul alocării cu blocuri de dimensiune fixă, se utilizează câte un semafor numărător şi câte un mutex pentru fiecare grup de blocuri de memorie

Implementarea alocării memoriei cu blocare

Semaforul numărător – este iniţializat cu valoarea numărului de blocuri de

memorie existente în grup– valoarea lui va indica numărul de blocuri de

memorie disponibile în grupul respectiv– blocurile de memorie sunt alocate şi eliberate de

la/la începutul listeiBlocurile de control sunt actualizate după fiecare operaţie de alocare sau eliberare de memorie

Implementarea alocării memoriei cu blocare

Alocarea memoriei

Pentru o operaţie de alocare de memorie reuşită un proces trebuie– să ia în posesie semaforul numărător (rezervă

blocurile de memorie necesare)– să ia în posesie mutex-ul (blochează operarea

simultană asupra grupului de memorie a altor procese)

Alocarea memoriei

Luarea în posesie a semaforului– reuşită – se rezervă un bloc de memorie. Valoarea

semaforului numărător este scăzută cu o unitate– nereuşită – înseamnă că nu mai sunt blocuri de

memorie liberă în grupul respectiv. Procesul se blochează şi aşteaptă eliberarea unui bloc de memorie

Alocarea memoriei

Luarea în posesie a mutex-ului– reuşită – se alocă un bloc de memorie şi se

actualizează blocul de control al grupului– nereuşită – înseamnă că grupul de blocuri

respectiv este accesat de alt proces pentru o operaţie de alocare sau eliberare a memoriei. Procesul se blochează şi aşteaptă încheierea operaţiei în curs

Alocarea memorie. Codul sursă

:Ia în posesie semafor(semafor_numărător)Ia în posesie mutexAlocă bloc de memorieEliberează mutex:

Eliberarea memoriei. Codul sursă

:Ia în posesie mutexEliberează bloc de memorieEliberează mutexEliberază semafor(semafor_numărător):

Avantaje

Sunt eliminate problemele de inversiune de prioritateAlocarea şi eliberarea memoriei este realizată în siguranţă

1

Programarea sistemelor de timp real

Elemente de proiectare a aplicaţiilor RT

Etapele proiectării

Specificarea cerinţelor aplicaţieiStabilirea cerinţelor sistemului– cerinţe hardware– cerinţe software

Scrierea programelor aplicaţieiCodificarea şi depanarea programelorInstalarea aplicaţieiTestarea, evaluarea şi măsurarea performanţelorÎntreţinerea programelor

Alte etape ale proiectării

Realizarea prototipuluiConceperea interfeţei om-maşinăElaborarea criteriilor de evaluare a sistemului

Specificarea cerinţelor aplicaţiei

Este realizată de către beneficiar– de multe ori este specifică acestuia– de obicei defineşte funcţionarea aplicaţiei în linii

mariEste detaliată prin discuţii şi precizări între beneficiar şi dezvoltator

Specificarea

La nivel informal– utilizează limbajul natural şi alte forme de reprezentare

imprecise (diagrame, grafice, scheme bloc)Nivel structural

– utilizează elemente de reprezentare grafică bine definite– au la bază componente elementare predefinite care sunt

conectate de o manieră bine determinatăNivel formal

– se bazează pe metode având proprietăţi matematice– pot fi concepute descrieri precise– proprietăţile acestora pot fi demonstrate (matematic)

Metode de specificare

Trebuie să prezinte funcţionalitatea sistemului folosind termeni expliciţi care să precizeze:– elementele de timp real specifice aplicaţiei– comportamentul în timp a sistemului– specificaţiile legate de siguranţa şi fiabilitatea

sistemului– funcţionarea sistemului la apariţia unui defect

Nu există o singură metodă de specificare a funcţionalităţii sistemuluiFiecare utilizează tehnica pe care o cunoaşte cel mai bine

Metode de specificare

Limbajul naturalSpecificaţiile matematiceOrganigrameDiagrame structuralePseudocod, limbaje de programare şi specificareDiagrame cu fluxuri de dateReţele PetriMetode bazate pe sisteme reactiveAutomate finiteMetode/Limbaje orientate obiectUML (Universal Modelling Language)SDL (System Description Language)

Limbajele naturale

Sunt ambigue şi nu există un sistem care să producă cod executabil pornind de la o descriere făcută doar într-un astfel de limbajPot fi utilizate pentru

– descrierea sistemelor simple– a constitui un punct de plecare pentru o descriere mai

detaliată– a sublinia anumite aspecte cărora trebuie să li se acorde o

atenţie sporităExemplu

Un simulator pentru automobil constă dintr-o cutie de viteze, un sistem de frânare, un sistem de afişare şi unul de accelerare. Fiecare sistem se execută sporadic cu excepţia sistemului de afişare care se execută la fiecare 100 ms. Viteza vehiculului la orice moment t este egală cu ...

Specificaţiile matematice

Sunt precise, lipsite de ambiguitate şi eficaceOptimizări ale sistemului pot fi obţinute prin optimizarea modelului matematicSe pot utiliza metode formale pentru demonstrarea funcţionării corecteExemplu

Un simulator pentru automobil constă dintr-o cutie de viteze, un sistem de frânare, un sistem de afişare şi unul de accelerare. Fiecare sistem... Poziţia automobilului faţă de planurile x şi z se modifică coform relaţiilor

dx=v(t) Tθ cos θdx=v(t) Tθ sin θ ...

Organigrame

Nu sunt recomandate deoarece produc instrucţiuni care nu sunt recomandate în cadrul unei programări structurate (ex. goto)În sistemele multiprocespot fi utilizate pentru a descriere funcţionarea fiecărui proces în parte

Citeşte cuvânt de stare

Start

Stop

Bit 1 =0? Bit 2 =0?

Indicator eşec

Da

NuNu

Diagrame structurale

Utilizate pentru a descriere descompunerea structurală a sistemuluiSe pot utiliza metode pentru optimizarea acestei descompuneri

Acceptăcomanda

Telefonie

Selectează beneficiar

Selectează bon

Acceptăalegerea

GazElectricitate

Vodafone Orange

Pseudocod, limbaje de programare

Permit realizarea descrierilor într-o manieră apropiată de limbajul naturalExemplu

Beginacceptă comandaafişează “Doriţi bon”

if (DA) setează tipăreşteBonelse

afişează “Alegeţi operaţiune”......

Diagrame bazate pe fluxuri de date

Se bazează pe utilizarea simbolurilor grafice care reprezintă procesele şi fluxurile de date dintre acestea

Controler

AfişorReceptor

Emiţător

Liber

Liber

Buffergol

Tranferdate

Preluare date Buffer

plin

Comenzi operator

Rapoarte pt. operator

Reţele Petri

Constituie un model matematic ce poate fi utilizat pentru specificarea unor sisteme multiprocesElemente de bază:– Stări/procese– Tranziţii

Tranziţie

2

Stare

Contor

P1

1

P2

T1

Reţele Petri

– Stările şi tranziţiile sunt etichetate– Graful iniţial are o serie de marcaje care

corespunde stării iniţiale– Evoluţia sistemului se face prin tranziţii dintr-o

stare în alta în funcţie de îndeplinirea condiţiilor de tranziţie

UML

Este un ansamblu de notaţii orientate obiecteste un standardpermite modelarea unor tipuri de sisteme diferite cu sau fără parte softwareeste un limbaj grafic, intuitivutilizat pentru comunicarea specificaţiilor între echipedezavantaje:

– nu are semantică formală– are numeroase variante în funcţie de pachetul de programe

folosit– nu permite generarea de cod de bună calitate

UML

Utilizează diagrame pentru identificarea funcţionalităţilor– exprimă comportamentul sistemului din punctul de

vedere al utilizatorului sub formă de acţiuni/reacţiuni

– descrie sistemul şi relaţiile între sistem şi mediul înconjurător

– constituie un mijloc de a determina necesităţile sistemului

– folosit de utilizatorii finali pentru a exprima aşteptările lor

UML

Pornind de la cazurile de utilizare se identifică structura sistemuluiRezultă obiectele care participă la fiecare funcţie

UML

Pornind de la identificarea obiectelor se identifică:– clasele (se generalizează obiectele)– grupurile de clase (în pachete, biblioteci)– asocierea unei activităţi fecărui pachet, biblioteci– introducerea părţii hardware sub formă de

componente– asocierea activităţilor componentelor hardware

SDL

Conceput iniţial pentru specificarea şi realizarea protocoaleloradaptat descrierilor formalese bazează pe principiul că un sistem este un ansamblu structurat de procese care se execută în paralel ce comunică prin intermediul mesajelor

SDL

SDL se bazează pe principiul structurării care permite descompunerea sistemului în părţi care pot fi definite, proiectate şi realizate în ordinea care convine proiectantuluiExistă 3 niveluri de structurare:

– nivel sistem: blocuri + canale de comunicaţie– nivel bloc: procese + linii de semnal– nivel proces

interfaţămediul înconjurător

sistem

bloc bloc

bloc

Verificarea specificaţiei

Înainte de a trece la etapa următoare trebuiesc verificate următoarele:– consistenţa specificaţiei– corectitudinea specificaţiei– completitudinea specificaţiei

Consistenţa specificaţiilor

Specificaţiile nu conţin erori privind– cerinţele funcţionale– cerinţele temporale– atributele– cerinţele de implementare

Consistenţa specificaţiilor

Se verifică să nu existe contradicţii între elemente sau funcţionalităţile specificate– nu există elemente care se anulează reciproc– nu există elemente care nu sunt compatibile– pentru aceleaşi mărimi se utilizează tipuri de date

diferite

Corectitudinea specificaţiilor

se verifică corectitudinea afirmaţiilor din specificaţiese verifică faptul că anumite specificaţii pot fi realizate în practică

Completitudinea specificaţiilor

se verifică să nu existe:– componente nespecificate– funcţionalităţi neprecizate– componente sau funcţionalităţi redundante

Stabilirea cerinţelor sistemuluicerinţe hardware

Numărul de intrări şi ieşiriNumărul de elemente de procesareNumărul de componente cu funcţii speciale:– temporizatoare– convertoare– module de comunicaţie pentru diferite protocoale– elemente de afişare– elemente de comandă (butoane, comutatoare,

senzori etc.

Cerinţe software

Sistemul de operare (RTOS) folositLimbajul de programare folositObiectele RTOS necesareAlte componente software– interfeţe utilizator– biblioteci de funcţii (matematice, comunicaţie,

aplicaţii specifice)

Scrierea programelor aplicaţiei

Codificarea şi depanarea programelor

Codificarea depinde de lin

Instalarea aplicaţiei

Testarea, evaluarea şi măsurarea performanţelor

Întreţinerea programelor

1

Programarea sistemelor de timp real

Elemente de proiectare a aplicaţiilor RT. Studiu de caz

Etapele proiectării

Specificarea cerinţelor aplicaţieiStabilirea cerinţelor sistemului– cerinţe hardware– cerinţe software

Scrierea programelor aplicaţieiCodificarea şi depanarea programelorInstalarea aplicaţieiTestarea, evaluarea şi măsurarea performanţelorÎntreţinerea programelor

Alte etape ale proiectării

Realizarea prototipuluiConceperea interfeţei om-maşinăElaborarea criteriilor de evaluare a sistemului

Arhitectura sistemului

Utilizator

WebServer

Internet

Bazăde date

Plăci dedezvoltare

PC

Placă cumicrocontroler

XS40-005XL XS40-010E XS95-108 XSA-50

Conexiuniparalele Conexiune

serială

Resurse oferite de sistemele de dezvoltare XESS

NuNuDaDaSoclu EEPROM serial

DaNuNuNuMicrobutonDaDaDaDaAfişor 7-segmente

DaDaDaDaOscilatorProgramabil

DaDaDaDaPort PS/2DaDaDaDaVGA portDaDaDaDaPort paralel256kBNuNuNuFlash16MB128kB128Kb32KbRAMNu803180318031Microcontroler

XC9572XLXC95108NuNuCPLDXC2S50NuXC 4010EXC 4005XLFPGAXSA-50XS95-108XS40-10EXS40-005XLCaracteristici

Sarcinile sistemului

Monitorizarea ieşirii plăcilor de dezvoltareComunicarea cu calculatorul prin portul serialGestionarea alimentării plăcilor de dezvoltareAfişarea pe ecranul LCDMonitorizarea temperaturii mediului ambiant

Monitorizarea ieşirii plăcilor de dezvoltare

Pentru fiecare placă de dezvoltare se monitorizează starea a 8 ieşiriCitirea ieşirilor se realizează la primirea comenzii de citire

Comunicarea cu calculatorul prin portul serial

Comunicarea este bidirecţionalăPrin intermediul conexiunii seriale se transmit– comenzi de la calculator la microcontroler– mesaje de validare a transmisiei– valorile citite la ieşirile plăcilor de dezvoltare– valoarea temperaturii mediului ambiant

Comunicarea se realizează prin intermediul unui protocol de comunicare

Protocol de comunicare

Comenzile sunt de forma[STX] [Comanda] [Lungime] [Date] [CRC] [ETX]

Comanda este reprezentată printr-un caracterLungime este o valoare pe 8 biţi care indică numărul de octeţi de date la care se adaugă 3 pentru

– octetul comenzii– octetul lungimii– octetul CRC

STX = start transmisieETX = sfârşit de transmisie

Protocolul de comunicaţie

Microcontrolerul va răspunde cu următoarele tipuri de mesaje– Mesaj de confirmare a recepţiei comenzii

[STX] [ACQ] [ETX]– Mesaj pentru comunicare de date

[STX] [Comanda] [Lungime] [Date] [CRC] [ETX]În mesajul de răspuns al doilea câmp reprezintă comanda căreia i se răspunde.

Protocolul de comunicaţie

Conform protocolului de comunicaţie, calculatorul trebuie să primească confirmarea recepţiei comenzii din partea microcontrolerului înainte de a trimite un nou mesajDacă nu este confirmată primirea comenzii în 5 secunde, comanda este retransmisă automatDupă cinci tentative nereuşite, calculatorul va afişa un mesaj de eroare

Comenzile sistemului

Comandă setarea rezoluţiei senzorului de temperatură la 12 biţi

0107Setează rezoluţia temperaturii la 12 biţi

Comandă oprirea alimentării plăcii 10205Opreşte placa 2

07

05

03

01

01Cod

Comandă oprirea alimentării plăcii 101Opreşte placa 1

Comandă citirea temperaturii mediului ambiant-Citeşte temperatură

Comandă citirea valorilor ieşirilor celei de a doua plăci de dezvoltare

02Citeşte placă 2

Comandă setarea rezoluţiei senzorului de temperatură la 14 biţi

02Setează rezoluţia temperaturii la 14 biţi

Comandă citirea valorilor ieşirilor primei plăci de dezvoltare

01Citeşte placă 1DescriereDataComandă

Comenzile sistemului

10

09

08

08Cod

Se iniţializează ambele plăci de dezvoltare şi senzorul de temperatură

-Iniţializare generală

Se iniţializează senzorul de temperatură-Iniţializare senzor de temperatură

Se iniţializează a doua placă de dezvoltare prin întreruperea tensiunii de alimentare şi apoi realimentarea plăcii

02Iniţializare placă 2

Se iniţializează prima placă de dezvoltare prin întreruperea tensiunii de alimentare şi apoi realimentarea plăcii

01Iniţializare placă 1DescriereDataComandă

Gestionarea alimentării plăcilor de dezvoltare

Plăcile de dezvoltare nu vor fi alimentate când– nu sunt folosite– tensiunea de alimentare depăşeşte valoarea

nominalăÎntreruperea alimentării se face prin intermediul unor relee comandate de microcontrolerAlimentarea şi întreruperea celor două plăci se realizează separat

Afişarea pe ecranul LCD

Ecranul LCD este folosit pentru afişarea diferitelor informaţii existente în sistem– Numărul plăcii– Valoarea ieşirilor plăcilor de dezvoltare– Valoarea temperaturii mediului ambiant

Modul de afişare– Afişarea se face alternant, când pentru prima

placă, când pentru cea de a doua cu o durată de 10s.

– Afişarea poate fi îngheţată prin activarea uneia din intrările microontrolerului (apăsarea unui buton).

Monitorizarea temperaturii mediului ambiant

Temperatura mediului este monitorizată prin intermediul unui senzor inteligent de tip SHT11Comunicarea între microcontroler şi senzor se realizează pe baza protocolului specific senzoruluiSenzorul poate fi configurat astfel încât temperatura să fie dată cu o rezoluţie de 12 sau 14 biţi. Temperatura este citită la fiecare 60 secunde

Funcţiile sistemului

Citire ieşiri plăci de dezvoltareRecepţionare comenzi de la calculator prin portul serialConfirmare primire comandăTrimitere răspunsOprirea tensiunii de alimentare a plăcilor de dezvoltareAlimentarea plăcilor de dezvoltareMăsurarea tensiunii de alimentare a plăcilor de dezvoltareAfişarea pe ecranul LCD date despre placa de dezvoltareMăsurarea temperaturii mediului ambiant

Determinarea caracteristicilor de timp

Pentru fiecare dintre acţiuni trebuie stabilit dacă sunt de tip– periodică– aperiodică– sporadică

Trebuie stabilit cine iniţiază acţiunile, deci dacă sunt:– declanşate de un eveniment– declanşate în funcţie de timp

Determinarea caracteristicilor de timp

EvenimentaperiodicăCitire ieşiri plăci de dezvoltare

EvenimentaperiodicăOprirea tensiunii de alimentare a plăcilor de dezvoltare

EvenimentaperiodicăTrimitere răspuns

EvenimentaperiodicăConfirmare primire comandă

EvenimentaperiodicăRecepţionare comenzi de la calculator prin portul serial

Tip declanşareTip acţiuneFuncţie

Determinarea caracteristicilor de timp

TimpperiodicăMăsurarea temperaturii mediului ambiant

TimpperiodicăAfişarea pe ecranul LCD date despre placa de dezvoltare

TimpperiodicăMăsurarea tensiunii de alimentare a plăcilor de dezvoltare

EvenimentaperiodicăAlimentarea plăcilor de dezvoltare

Tip declanşareTip acţiuneFuncţie

Determinarea caracteristicilor de timp

Trebuie ţinut cont de– relaţiile de precedenţă– relaţiile de excludere mutuală– alte constrângeri temporale

Determinarea caracteristicilor de timp

Depinde de recepţionarea comenziiCitire ieşiri plăci de dezvoltare

După recepţionarea comenzii sau la sesizarea supratensiunii

Oprirea tensiunii de alimentare a plăcilor de dezvoltare

După confirmarea comenzii şi când este disponibil răspunsul

Trimitere răspuns

Imediat după recepţionarea comenziiConfirmare primire comandă

-Recepţionare comenzi de la calculator prin portul serial

Relaţie/Constrângere de timpFuncţie

Determinarea caracteristicilor de timp

La fiecare 60sMăsurarea temperaturii mediului ambiant

Excludere mutuală între procesele care afişează datele celor două plăciAlternant 10s

Afişarea pe ecranul LCD a datelor despre placa de dezvoltare

La fiecare 10sMăsurarea tensiunii de alimentare a plăcilor de dezvoltare

După recepţionarea comenziiAlimentarea plăcilor de dezvoltareRelaţie/Constrângere de timpFuncţie

Determinarea intrărilor şi ieşirilor

Pe baza analizei specificaţiilor s-au identificat următoarele intrări

– intrările corespunzătoare plăcii 1– intrările corespunzătoare plăcii 2– intrarea comunicaţiei seriale– intrarea de măsurare a tensiunii de alimentare a plăcii 1– intrarea de măsurare a tensiunii de alimentare a plăcii 2– intrarea comunicaţiei seriale cu calculatorul– intrarea comunicaţiei seriale cu senzorul de temperatură – intrarea de comandă a afişării continue

Determinarea intrărilor şi ieşirilor

Pe baza analizei specificaţiilor s-au identificat următoarele ieşiri– ieşirea de comandă a alimentării plăcii 1– ieşirea de comandă a alimentării plăcii 2– ieşirea comunicaţiei seriale– ieşirea de afişare pe LCD– ieşirea comunicaţiei seriale cu calculatorul– ieşirea comunicaţiei seriale cu senzorul de

temperatură

Determinarea necesarului de resurse pentru intrări şi ieşiri

1 intrare digitală

1 intrare digitală

1 intrare analogică

1 intrare analogică

1 intrare8 intrări digitale8 intrări digitale

Necesar

8 terminale port Bintrările corespunzătoare plăcii 1

RA4intrarea de comandă a afişării continue

RA2 *intrarea comunicaţiei seriale cu senzorul de temperatură

RA1 (AN1)intrarea de măsurare a tensiunii de alimentare a plăcii 2

RA0 (AN0)intrarea de măsurare a tensiunii de alimentare a plăcii 1

RC7 (RX)intrarea comunicaţiei seriale cu calculatorul

8 terminale port Dintrările corespunzătoare plăcii 2

AlocareIntrare

* În cazul senzorului SHT11 transmisia se face pe 2 fire, 1 este pentru semnalul de ceas (unidirecţional) şi al doilea pentru semnalul de date (bidirecţional)

Determinarea necesarului de resurse pentru intrări şi ieşiri

6 ieşiri digitale

1 ieşire digitală

1 ieşire digitală

1 ieşire digitală

1 ieşire digitală

Necesar

RC4ieşirea de comandă a alimentării plăcii 1

RE0-RE1,RC0-RC3ieşirea de afişare pe LCD

RA3 *ieşirea comunicaţiei seriale cu senzorul de temperatură

RC6 (TX)ieşirea comunicaţiei seriale

RC5ieşirea de comandă a alimentării plăcii 2

AlocareIntrare

* În cazul senzorului SHT11 transmisia se face pe 2 fire, 1 este pentru semnalul de ceas (unidirecţional) şi al doilea pentru semnalul de date (bidirecţional)

Determinarea funcţiilor concurente

Fiecare funcţie poate implica o anumită resursă a sistemuluiResursele sunt:– unitatea centrală– unităţile periferice– memoria– terminale

Caracterul dispozitivelor

Dispozitivele cu care sistemul interacţionează pot fi– de intrare (ieşirile plăcilor de dezvoltare)– de ieşire (dispozitivul de afişare LCD)– de intrare/ieşire (senzorul de temperatură)

Resursele pot fi– pasive (nu produc întreruperi)

sincroneasincrone

– active (produc întreruperi)sincroneasincrone

Caracterul dispozitivelor

Dispozitivele pasive– nu produc întreruperi– sistemul este cel care trebuie să iniţieze comunicarea cu

dispozitivul– produc un răspuns doar dacă acest lucru le-a fost cerut– cererea poate fi

periodică – program implementat sub forma unei bucle infinite în care cererea este iniţiată la fiecare trecere prin buclăaperiodică – cererea este făcută doar atunci când sunt necesare anumite date

– frecvenţa cererilor trebuie să fie în concordanţă cu dispozitivul interogat

Caracterul dispozitivelor

Frecvenţa prea mică, este posibil ca anumite date să fie pierduteFrecvenţa prea mare, microcontrolerul este încărcat pe o perioadă mai mare cu sarcini mai puţin importante

Identificarea dispozitivelor active

Sunt dispozitivele care generează întreruperiÎn funcţie de aplicaţie unele dispozitive pot fi pasive sau activeEx: CAN

– pasiv – se comandă conversia, se testează sfârşitul conversiei citind bitul

– activ – se utilizează ADIF (Analog/Digital Interrupt Flag) pentru a anunţa microcontrolerul de încheierea conversiei

– Ex: USART – se utilizează RCIF sau TXIF pentru semnalarea golirii sau umplere a memoriei tampon pentru recepţie sau transmisie

Identificarea dispozitivelor pasive

Dispozitive care nu generează întreruperi– USART– CAN– afişor LCD– senzor de temperatură– plăci de dezvoltare– relee electromagnetice

1

Programarea sistemelor de timp real

Elemente de proiectare a aplicaţiilor RT. Studiu de caz

(partea a II-a)

Etapele proiectării

Specificarea cerinţelor aplicaţieiStabilirea cerinţelor sistemului– cerinţe hardware– cerinţe software

Scrierea programelor aplicaţieiCodificarea şi depanarea programelorInstalarea aplicaţieiTestarea, evaluarea şi măsurarea performanţelorÎntreţinerea programelor

Identificarea dispozitivelor pasive

Dispozitive care nu generează întreruperi– USART– CAN– afişor LCD– senzor de temperatură– plăci de dezvoltare– relee electromagnetice

Determinarea resurselor software

Selectarea modului de implementare– folosind tehnici uzuale de programare

interogarea în buclăutilizarea întreruperilor

– folosind nucleu/sistem de operare de timp realSelectarea limbajului de programareAlegere:– sistem de operare de timp real– uCOS-II– limbajul C

Determinarea resurselor software

Stabilirea obiectelor RT folosite pentru– partiţionarea aplicaţiei şi realizarea concurenţei– mecanisme de sincronizare– mecanisme de temporizare– mecanisme pentru schimb de informaţii între

procese– mecanisme pentru accesul partajat la resursele

sistemuluicomunicaţia serială cu calculatorulconvertorul analog numericdispozitivul de afişare LCD

Partiţionarea aplicaţiei şi realizarea concurenţei

În cazul folosirii unui RTOS, partiţionarea este realizată prin intermediul proceselorSe stabilesc câte procese vor exista ţinând cont de– numărul maxim de procese permis de RTOS– numărul maxim de procese permis de resursele

sistemului (memoria disponibilă)– complexitatea funcţiilor pe care le implementează

fiecare proces

Partiţionarea aplicaţiei şi realizarea concurenţei

Se porneşte de la funcţiile îndeplinite de sistemSe alocă aceste funcţii diverselor proceseSe determină interacţiunile dintre procese

Alocarea proceselor şi a priorităţilor

77Măsurarea temperaturii mediului ambiant

66Afişarea pe ecranul LCD date despre placa de dezvoltare

44Măsurarea tensiunii de alimentare a plăcilor de dezvoltare

22Alimentarea plăcilor de dezvoltare

22Oprirea tensiunii de alimentare a plăcilor de dezvoltare

55Trimitere răspuns

11Confirmare primire comandă

11Recepţionare comenzi de la calculator prin portul serial

33Citire ieşiri plăci de dezvoltare

PrioritateProcesFuncţii

Alocarea proceselor şi a priorităţilor (varianta 2)

99Măsurarea temperaturii mediului ambiant

88Afişarea pe ecranul LCD date despre placa de dezvoltare

77Măsurarea tensiunii de alimentare a plăcii 2

66Măsurarea tensiunii de alimentare a plăcii 1

22Alimentarea plăcilor de dezvoltare

22Oprirea tensiunii de alimentare a plăcilor de dezvoltare

55Trimitere răspuns

11Confirmare primire comandă

11Recepţionare comenzi de la calculator prin portul serial

44Citire ieşiri placă 2

33Citire ieşiri plăcă 1

PrioritateProcesFuncţii

Alocarea proceselor şi a priorităţilor

Observaţii:Partiţionarea nu este unicăMai multe funcţii pot fi alocate aceluiaşi procesÎn cadrul uCOS-II procesele au priorităţi unice

Procesele şi interacţiunile dintre ele

CitPlaca1CitPlaca1

AfisLCDAfisLCD

MasTempMasTemp

AlimAlim

ComPCComPC

MasTensMasTens

CitPlaca2CitPlaca2

Procesele şi interacţiunile dintre ele (varianta 2)

CitPlaca1CitPlaca1

AfisLCDAfisLCD

MasTempMasTemp

AlimAlim

ComPCComPC

MasTens2MasTens2

CitPlaca2CitPlaca2

MasTens1MasTens1

Mecanisme de sincronizare

Procesele de măsurare vor fi declanşate de către procesul de ComPC la primirea comenzii corespunzătoareObiecte RT ce pot fi folosite:– semafoare– cutii poştale– semnale

Cutiile poştale au avantajul că permit transmiterea unei valori (valoarea măsurată)

Mecanisme de temporizare

Permit introducerea unor temporizări între două execuţii consecutiveImplementarea poate fi realizată folosind– apeluri blocante de tip Delay– apeluri blocante cu aşteptare pe un timp definit

Vor fi utilizate pentru – măsurarea periodică a temperaturii şi tensiunii– afişarea alternantă a informaţiilor pe LCD despre

cele 2 plăci de dezvoltare

Mecanisme pentru schimb de informaţii între procese

Se aleg obiectele RT care răspund cel mai bine necesităţilor aplicaţieiSe pot utiliza

– cozi de mesaje– cutii poştale– conducte

Vor fi utilizate pentru transmiterea valorilor mărimilor măsurate (temperatură, tensiuni de alimentare) şi a valorilor ieşirilor plăcilor de dezvoltareÎn cazul implementării se vor utiliza cutii poştale fiind vorba de transmiterea unei singure valori

Mecanisme pentru accesul partajat la resursele sistemului

Rezultatul măsurătorilor sunt transmise către calculator folosind aceeaşi legătură serialăConvertorul analog numeric este folosit pentru măsurarea ambelor tensiuni de alimentare a plăcilorDispozitivul LCD este folosit pentru afişarea datelor de la procesele de măsurare. Afişarea datelor se va face pe rând

Mecanisme pentru accesul partajat la resursele sistemului

Partajarea canalului de comunicare serială va fi asigurată de procesul ComPCPentru realizarea accesului partajat la convertorul analog/numeric şi la dispozitivul de afişare se vor utiliza semafoare cu excludere mutuală (mutex).

Scrierea programelor de aplicaţie

Se va folosi pseudocodul şi alte reprezentări grafice care pot fi apoi transpuse cu uşurinţă într-un limbaj de programarePentru pseudocod se vor utiliza:– instrucţiuni de atribuire– instrucţiuni de buclare (for, while, loop)– instrucţiuni de bifurcare (if then else)– instrucţiuni de selecţie (case, switch)– simboluri sau cuvinte cheie de delimitare a

blocurilor (begin, end, {,})

Citirea semnalelor de ieşire la placa 1

process CitPlaca1(){

Ia în posesie SemCitPlaca1;Citeşte port B ;Trimite valP1 în CP_Placa1; Ia în posesie MutexLCD;Scrie valP1 la LCD;Eliberează MutexLCD;

}

Citirea semnalelor de ieşire la placa 2

process CitPlaca2(){

ia în posesie SemCitPlaca2;citeşte port D;trimite valP2 în CP_Placa2; ia în posesie MutexLCD;scrie valP2 la LCD;eliberează MutexLCD;

}

Măsurarea temperaturii

process MasTemp(){

aşteaptă 60s mesaj în CP_MasTemp();switch (mesaj)

case temp_12b) {configurează senzor pe 12 biţi;măsoară temperatura;trimite valTemp în CP_ValTemp;ia în posesie MutexLCD;scrie valTemp la LCD;eliberează MutexLCD;}

Măsurarea temperaturii

case temp_14b: { configurează senzor pe 14 biţi;măsoară temperatura;trimite valTemp în CP_valTemp;ia în posesie MutexLCD;scrie valTemp la LCD;eliberează MutexLCD;}

case init: initializează senzor temperatură;}

}

Măsurarea tensiunii plăcii 1

process MasTens1() {ia în posesie 10s SemTens1;ia în posesie MutexCAN;configurează CAN pentru placa 1; // AN0citeşte valoarea tensiunii placă 1;trimite valTens1 în CP_valTens1;if (valTens1< valMin || valTens1> valMax) {

seteaza indicator Alim1Stop; }eliberează MutexCAN;ia în posesie MutexLCD;scrie valTens1 la LCD;eliberează MutexLCD;

}

Măsurarea tensiunii plăcii 2

process MasTens2() {ia în posesie 10s SemTens2;ia în posesie MutexCAN;configurează CAN pentru placa 2; // AN1citeşte valoarea tensiunii placă 2;trimite valTens2 în CP_valTens2;if (valTens2< valMin || valTens2> valMax) {

seteaza indicator Alim2Stop; }eliberează MutexCAN; ia în posesie MutexLCD;scrie valTens2 la LCD;eliberează MutexLCD;

}

Gestionarea alimentării

process Alim() {Eliberează SemTens1;Aşteaptă mesaj 10s în CP_valTens1;if (mesaj== Tens1_0 || Alim1Stop) {

Opreste alimentarea placii 1;} else {

Alimentează placa 1;}Eliberează SemTens2Aşteaptă mesaj 10s în CP_valTens2;if (mesaj== Tens2_0 || Alim2Stop) {

Opreste alimentarea placii 2;} else {

Alimentează placa 2;}}

Comunicaţia cu PC-ul

process ComPC(){if (msg_comanda!=0)

trimite confirmare;switch (comanda)

case (citeste placa 1): {eliberează SemCitPlaca1;aşteaptă mesaj în CP_Placa1;trimite val dinCP_Placa1 la PC;}

Comunicaţia cu PC-ul

case (citeste placa 2); {eliberează SemCitPlaca2;aşteaptă mesaj în CP_Placa2;trimite val dinCP_Placa2 la PC;}

case (citeste temperatura): {if (rez=temp_12b) trimite mesaj temp_12b în

CP_MasTemp;else trimite mesaj temp_14b în CP_MasTemp;asteaptă mesaj în CP_ValTemp; trimite CP_ValTemp la PC;

}

Comunicaţia cu PC-ul

case (seteaza rezolutia): if (data==01) rez=temp_12b;else rez=temp_14b;

case (opreşte placa 1): trimite mesaj Tens1_0 înCP_valTens1;

case (opreşte placa 2): trimite mesaj Tens2_0 înCP_valTens2;

case (iniţializare placa1); {trimite mesaj Tens1_0 în CP_valTens1;trimite mesaj Tens1_1 în CP_valTens1;

}

Comunicaţia cu PC-ul

case (iniţializare placa2): {trimite mesaj Tens2_0 în CP_valTens2;trimite mesaj Tens2_1 în CP_valTens2;}

case (initializare generală): {trimite mesaj Tens1_0 în CP_valTens1;trimite mesaj Tens1_1 în CP_valTens1;trimite mesaj Tens2_0 în CP_valTens2;trimite mesaj Tens2_1 în CP_valTens2;trimite mesaj init în CP_MasTemp;}

} }