Sie sind auf Seite 1von 6

#include<includes.

h>

#define N_TASKS 3

#define STACKSIZE 512

int TaskDate[3];

OS_STK TasksStart_Stack[STACKSIZE]={0,};

void TaskStart(void*Id);

#define TaskStart_Prio11

OS_STK task0_Stack[STACKSIZE]={0,};

.IAR embedded work bench

#define Task0_Prio 22

OS_STK task1_Stack[STACKSIZE]={0,};

void Task1(void*Id);

#define TaskStart_Prio 33

OS_STK task2_Stack[STACKSIZE]={0,};

void Task2_Prio 44

#define Task2_Prio 44

OS_EVENT*SEM;

int main(void)

BSP_IntDisAll();

BSP_Init();

OSInit(); //needed by uC/OS-II//

SEM=OSSemCreate(1);

OSTaskCreate(TaskStart,(void *)0,(OS_STK *)&TaskStart_Stack[STACKSIZE-1],

TaskStart_Prio);
OSStart();

return 0;

void TaskStart(void *Id)

INT8U i;

for(i=0;i<n_TASKS;i++) /*create N_TASKS identical tasks */

TaskData[i]=i;

printf("Welcome to USCOS:\n");

OSTaskCreate(Task0,(void*)&TaskData[0],(OS_STK*)&task0_Stack[STACKSIZE-1],Task0_Prio);

OSTaskCreate(Task1,(void*)&TaskData[1],(OS_STK*)&task1_Stack[STACKSIZE-1],Task1_Prio);

OSTaskCreate(Task2,(void*)&TaskData[2],(OS_STK*)&task2_Stack[STACKSIZE-1],Task2_Prio);

OSTaskSuspend(TaskStart_Prio);

void Task0(void*Id)

INT8U err;

INT8U id;

id=*(int *)id;

for(;;)

printf("\n\r Task %d is waiting an event.",id);

OSTimeDly(3000);
printf("\n\r The event of Task %d come.",id);

printf("\n\r Task %d is try to get SEMAPHORES .",id);

OSSemPEND(SEM,0,&err); /*Acquire SEM*/

switch(err)

case OS_NO_ERR:

printf("\n\r Task %d has got the SEMAPHORES."id);

FIO3PIN=0X44;

printf("\n");

break;

default:

printf("\n\r Task %d is suspended .,id);

OSTimeDly(2990);

FIO3PIN=0X00;

printf("\n\r Task %d release SEMAPHORE",id);

OSSSemPost(SEM);

void Task 1(void*Id)

INT8U id;

id=*(int*)Id;

for(;;)

{
printf('\n\r Task %d is waiting an event",id);

OSTimeDly(2000);

printf('\n\r The event of Task %d come,"id);

OSTimeDly(2000);

FIO3PIN=0X008000FF;

OSTimeDly(2000);

FIO3PIN=0X00800000;

void Task2(void*Id)

INT8U err;

INT8U id;

id=*(int*)Id;

for(;;)

printf(''\n\r Task %d is waiting an event."id);

OSTimeDly(2000);

printf('\n\r The event of Task %d come.",d);

OSTimeDly(2000);

FIO3PIN=0X00800000;

void Task2(void*Id)

{
INT8U err;

INT8U id;

id=*(int*)Id;

for(;;)

printf("\n\r Task %d is waiting a event ."id);

OSTimeDly(1000);

printf('\n\r The event of Task %d come.",id);

printf('\n\r Task %d is try to get SEMAPHORES ",ID);

OSSemPend(SEM,0,&err);

switch(err)

case OS_NO_ERR:

printf("\n\r Task %d has got SEMAPHRES"id);

FIO3PIN=0X11;

printf('\n");

break;

default:

printf('\n\r Task %d is suspended ",id);

printf("\n");

OSTimeDly(5000);

FIO3PIN=0X00;

printf('\n\r Task %d release SEMAPHORE.",id);


printf("\n");

OSSemPost(SEM);

Das könnte Ihnen auch gefallen