You are on page 1of 8

REZOLVARE:

CPU: my_cpu

OS: my_os(PRETASKHOOK=TRUE)

APPMODE: my_appmode

COUNTER MyC {

MAXALLOWEDVALUE = 1; // 1 msec

TYPE = SOFTWARE;

MINCYCLE=1;

TICKSPERBASE=1;

ISR MyISR{

CATEGORY = 2; // CATEGORIA 1 NU FOLOSESTE SERV API

STACKSIZE = 128;

IPL = 1;

VECTORNAME =...//TIMER SETAT HW

TASK A

PRIORITY=10;

SCHEDULE=FULL;

AUTOSTRAT=FALSE;

ACTIVATION=1;

STACKSIZE=128;}
OS_MAIN( void ) {

DIOInit();

Init_PIT0();

StartOS(my_appmode); }

ISR(MyISR)

IncrementCounter(MyC);

AchitIntrerupereTimer();

TASK(Task1) {

Os_StopwatchTickType start,finish,correction;

#ifdef OS_TIME_MONITORING

start = Os_GetExecutionTime();finish = Os_GetExecutionTime();

correction = finish - start;

start = Os_GetExecutionTime();

#endif

GetResource(Resource1);

……

ReleaseResource(Resource1);

#ifdef OS_TIME_MONITORING

finish = Os_GetExecutionTime();

used = finish - start - correction;

#endif

}
LA MOMENTUL 150.

SE AFLA IN STAREA: R
NU STIU, CRED CA A .

HIPERPERIOADA=15;
LA 5,5: T1= S; T2=E; T3=S;
LA 10: T1=S; T2=R; T3=E;
Se executa instr. L2B

CPU: my_cpu

OS: my_os

APPMODE: my_appmode

COUNTER MyC {

MAXALLOWEDVALUE = 1000;

TYPE = SOFTWARE;

MINCYCLE=1;
TICKSPERBASE=1;}

ISR MyISR{

CATEGORY = 2; // CATEGORIA 1 NU FOLOSESTE SERV API

STACKSIZE = 128;

IPL = 1;

VECTORNAME =...//TIMER SETAT HW

ALARM Al_A{

COUNTER =MyC;

ACTION=ACTIVATETASK{TASK=A};

AUTOSTRAT= TRUE {APPMODE=my_appmode;

ALARMTIME=0; //faza

CYCLETIME=100;}; //perioada

RESOURCE MyRES{

RESOURCETYPE = STANDARD;

TASK A

PRIORITY=10;

SCHEDULE=FULL;

AUTOSTRAT=FALSE;

ACTIVATION=1;

STACKSIZE=128;

TASK B
{

PRIORITY=5; /

SCHEDULE=FULL;

AUTOSTRAT=FALSE;

ACTIVATION=1;

STACKSIZE=128;

EVENT=EV;

OS_MAIN( void ) {

DIOInit();

Init_PIT0();

StartOS(my_appmode); }

TASK(A)

{ uint8_t val61, val62,val63,val64;

GetResource(MyRES);

val61= DIOGetButtonState(61);

val62= DIOGetButtonState(62);

val63= DIOGetButtonState(63);

val64= DIOGetButtonState(64);

ReleaseResource(MyRES);

uint8_t i;

Os_StopwatchTickType start, finish, correction;

#ifdef OS_TIME_MONITORING

start = Os_GetExecutionTime();finish = Os_GetExecutionTime();

correction = finish - start;

start = Os_GetExecutionTime(); //incep sa evaluez intervalul de timp

#endif

for (i=1:,<1000;i++){
#ifdef OS_TIME_MONITORING

finish = Os_GetExecutionTime();

if(finish>start)

used = finish - start - correction;}

else

used = finish - start + valmax - correction;

#endif

if(uded<1000)

SetEvent(B,EV);

TerminateTask();

You might also like