Documente Academic
Documente Profesional
Documente Cultură
1.2. Cygwin
Cygwin este un instrument software pentru Windows ce permite dezvoltarea
de aplicatii intr-o maniera asemanatoare cu cea din Linux. Cygwin va fi folosit pentru
a executa echivalentele unor comenzi Linux in sistemul de operare Windows.
Cygwin este folosit doar pe parcursul procesului automat de compilare. Nu
este nevoie de nici o interactiune a utilizatorului pentru configurarea acestui
enviroment astfel incat procesul de copilare sa functioneze!
Comanda cea mai importanta ce va fi folosita este comanda “make”. Ea este
foarte utila atunci cind se lucreaza cu proiecte ce contin multe fisiere si exista
dependente intre diferitele fisiere sursa. Aceasta comanda se bazeaza pe utilizarea
fisierelor makefile si permite lansarea procesului automat de compilare. Comanda
make va fi apelata in cadrul laboratorului cu urmatorii parametri posibili:
make - compileaza modulele application si bootloader
make application - compileaza modulul application
make bootloader – momentan inactiv
make clean - sterge toate fisierele obiect si fisierele .abs
make application clean - sterge fisierele obiect si .abs ce tin de appl.
make bootloader clean – momentan inactiv
• BMWStandardCore.lnk – lansarea in
executie a acestui fisier creaza o mapare
temporara pe discul „Z” a intregii structuri de
directoare a sistemului de operare; acest
lucru este necesar pentru a minimiza calea
de cautare a fisierelor in procesul de
compilare, restrictia fiind impusa de utilizarea
aplicatiei Cygwin.
• AC_CONTI – contine toate fisierele care pot fi modificate de catre utilizator;
• src.bat – configureaza caile de acces la compilatorul folosit (CodeWarrior), la
Cygwin si la Java;
• proosek_configurator – permite
configurarea kernelui sistemului de operare;
• geny_configurator – permite configurarea
driverului de CAN (definirea mesajelor care
pot fi trimise/receptionate, functii de
callback asociate mesajelor etc.);
2. ProOSEK
2.1. Nucleul ProOSEK
Nucleul ProOSEK reprezinta o implementare a standardului sistemului de
operare OSEK/VDX-OS. ProOSEK este format din ProOSEK Configurator si o
structura data de directoare si fisiere. Structura data de directoare si fisiere a fost
prezentata pe scurt in unul din laboratoarele anterioare. In acest laborator, precum si
in laboratoarele urmatoare va fi prezentat ProOSEK Configurator si modul in care
acesta poate fi folosit pentru a dezvolta aplicatii folosind nucleul ProOSEK.
Procesul de dezvoltare al unei aplicatii este prezentat in figura.
2.2. ProOSEK Configurator
ProOSEK Configurator reprezinta principalul instrument folosit in procesul de
dezvoltare al unei aplicatii, el permitand configurarea sistemului de operare
corespunzator cerintelor aplicatiei. Zona marcata din Fig.1 pune in evidenta rolul
aplicatiei ProOSEK Configurator si interactiunea acestuia cu sistemul de operare.
In prima faza obiectele necesare din sistem sunt specificate si configurate. In
faza a doua, fisierele sistemului de operare ProOSEK sunt generate si pot fi link-
editate impreuna cu fisierele sursa ale aplicatiei. ProOSEK Configurator este format
din ProOSEK Graphical Configurator si System Generator.
ProOSEK Graphical Configurator permite editarea in mod grafic a tuturor
obiectelor din sistemul de operare precum si incarcarea sau salvarea configuratiilor
in formatul OIL (OSEK Implementation Language).
System Generator (Generatorul sistemului de operare) implementeaza
urmatoarele operatii:
• verificarea consistentei configuratiei;
• calculul necesarului de memorie RAM pentru memorarea structurii
de date a sistemului;
• generarea nucleului ProOSEK pe baza configuratiei (os.h si os.c);
• generarea fisierului os.orti, fisier ce poate fi folosit in procesul de
depanare de WinIDEA sau alte aplicatii asemanatoare;
• generarea unui model de aplicatie.
System Generator este integrat in ProOSEK Configurator dar poate fi apelat si
in mod linie de comanda. Acest lucru permite integrarea generarii sistemului in
procesul make, lucru prezentat in laboratorul anterior.
ProOSEK Configurator poate fi lansat in executie prin rularea fisierului
ProOSEK.bat din directorul D:\IP2\OSEK\tools\proosek_configurator. Figura
prezinta interfata grafica a aplicatiei.
Cele mai importante attribute ale obiectului OS sunt prezentate mai jos:
• MICROCONTROLLER – indica tipul de microcontroller folosit din familia
S12X;
• S12X_REALTIMECLOCK – indica daca este folosita facilitatea de ceas de
timp real si ce canal de timp este utilizat pentru acest scop;
• S12X_XGATE_INIT – indica nucleului sistemului de operare daca sa
initializeze modulul XGATE;
• S12X_XGATE_VECTORTABLE – indica faptul ca trebuie generata o tabela a
vectorilor de intreruperi si pentru modulul XGATE;
• S12X_MEMORY_MODEL – indica modelul de memorie folosit. Pentru S12X
este folosit de obicei modelul “Banked”.
• S12X_ISR_NESTING – indica cum si daca se pot imbrica intreruperile;
• CC – este un atribut specific pentru ProOSEK. Indica ce tipuri de task-uri vor fi
folosite.
• SCHEDULE – este un atribut specific pentru ProOSEK. Specifica tipul de
planificare folosita.
• USERMAIN – indica faptul ca se doreste a se defini rutina main() in cadrul
aplicatiei utilizator si ca nu va fi continuta in mod predefinit de nucleul
sistemului generat.
• STARTUPHOOK – indica faptul ca aplicatia va contine o functie numita
StartupHook() ce va fi apelata automat la pornirea sistemului.
• PRETASKHOOK – indica faptul ca aplicatia va contine o functie
PreTaskHook() ce va fi apelata de fiecare data cand un task este planificat.
Nucleul sistemului de operare va contine referiri la aceasta functie ce va trebui
definite de utilizator in cadrul aplicatiei.
• USERESSCHEDULER – indica faptul ca utilizatorul doreste sa utilizeze
resursa predefinita RES_SCHEDULER. Achizitionarea acestei resurse
determina dezactivarea planificatorului.
• ISR1SYMBOLNAME – indica forma numelor alocate intreruperilor din
categoria 1in C. Daca parametrul are valoarea TRUE, numele intreruperii in C
va fi xx si nu OSEKOS_ISR1_xx.
Toate atributele obiectului OS sunt obligatorii. Pentru mai multe detalii despre
atributele obiectului OS consultati notitele de curs.
• Name – numele obiectului de tip TASK; valoarea acestui atribut este unica;
• Type – acest atribut este specific sistemului ProOSEK. Atributul Type indica
modul in care se comporta task-ul. Acest atribut poate avea 2 valori posibile:
BASIC – task-ul nu poate astepta aparitia unor evenimente;
EXTENDED – task-ul poate astepta aparitia unor evenimente;
• Priority – Acest atribut are ca valoare un numar intreg ce defineste prioritatea
task-ului in procesul de planificare. O valoare mai mare a acestui atribut indica
o prioritate mai mare a task-ului. Acest argument nu poate avea valori
negative.
• Activation – indica numarul maxim de activari ale task-ului premise in coada.
Valoare 1 indica faptul ca este permisa o singura activare. Acest argument nu
poate lua valori negative sau nule.
• Schedule – indica daca task-ul poate fi interupt sau nu din executie. Valorile
posibile sunt:
NON – task-ul nu poate fi intrerupt.
FULL – task-ul poate fi intrerupt.
• Stacksize – specifica dimensiunea in octeti a stivei necesare acestui task.
Sistemul adauga automat spatiu suplimentar pentru apelul functiilor de sistem
(ActivateTask si TerminateTask).
• Callscheduler – acest atribut indica daca functia Shedule() va fi apelata sau
nu pe parcursul task-ului. Daca acest lucru nu este cunoscut, atributul va avea
valoarea DON’T KNOW.
Toate atributele prezentate mai sus sunt obligatorii. Daca unul dintre aceste
atribute nu a fost definit, procesul de verificare din ProOSEK Configurator va genera
o eroare.
• ActivateTask(TaskType TaskID)
o activeaza un task
o poate fi apelata de la nivel de task sau de ISR
• TerminateTask(TaskType TaskID)
o Termina executia unui task
o poate fi apelata doar de la nivel de task
• ChainTask(TaskType TaskID)
o termina task-ul current si activeaza task-ul identificat de TaskID
o poate fi apelata doar de la nivel de task
• GetTaskID(TaskRefType TaskID)
o returneaza identificatorul task-ului activ la momentul respective
o poate fi apelata de la nivel de task, de ISR sau din rutinele
PreTaskHook(), PostTaskHook() si ErrorHook()
Exemplu:
DeclareTask(Task_1s); // se declara task-ul
si
TASK(Task_1s) // se defineste task-ul
{
(void)TerminateTask();
}
5. Lucrul in laborator
Exercitiul 1:
Sa se modifice sistemul astfel incat nucleul sistemului de operare sa permita lucrul cu
functiile PreTaskHook() si PostTaskHook().
1. Se modifica atributele obiectului OS in ProOSEK Configurator.
2. Se genereaza fisierele os.c si os.h.
3. Se verifica in fisierul de configurare xdp512_application.oil modificarea valorilor
celor doi parametri PRETASKHOOK si POSTTASKHOOK.
4. Se verifica aparitia referirilor si a apelurilor functiilor in fisierele generate.
5. Se adauga corpuri vide pentru cele doua functii in fisierul applmain.c.
6. Se compileaza aplicatia.
Exercitiul 2:
Sa se modifice functia PreTaskHook() definita la exercitiul 1 astfel incat sa se
realizeze urmatoarele operatiuni:
• sa comande LED-ul conectat la pinul PB6 cu perioada de aproximativ 1
secunda;
• sa comande aprinderea/stingerea unui LED conectat la pinul PK2 cu o
perioada de aproximativ 250ms, folosind folosind comutarile spre starea “in
curs de executie” ale task-ului de perioada 2ms.
Obs:
• Instructiunea de comanda a pinului PB6 din task-ul de 1s va fi comentata!
• Va fi folosita functia GetTaskID.
Exercitiul 3:
• Sa se defineasca doua obiecte de tip TASK cu urmatoarele specificatii:
a. Nume: Task_A
Prioritate: 10
Activari: 1
Marime stiva: 20
Mod planificare: Ne-preemtiv
b. Nume: Task_B
Prioritate: 10
Activari: 1
Marime stiva: 20
Mod planificare: Ne-preemtiv