1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
| #include "config.h"
#include "stdlib.h"
#include<LPC21xx.H>
#include<key.h>
#include<lcd.h>
OS_STK Task1Stack[100];
void Task1(void *pdata);
OS_STK Task2Stack[256];
void Task2(void *pdata);
static OS_EVENT *semaphorea;
static OS_EVENT *semaphoreb;
//OS_TASK_CHANGE_PRIO_EN=1;
int main (void)
{
keyinit();
LCDInit();
lcdcmd(0x80);
LCDInit();
OSInit();
semaphorea = OSSemCreate(1); //counting semaphore ,1st semaphore
semaphoreb = OSSemCreate(1); //2nd semaphore
if(semaphorea!=NULL)
{
DisplayLCD("Sema a create",13);
}
else
{
DisplayLCD("Sema a not create",17);
}
if(semaphoreb!=NULL)
{
DisplayLCD("Sema b create",13);
}
else
{
DisplayLCD("Sema b not create",17);
}
delay();
clrscreen();
delay();
//DisplayLCD("Key: LCD:");
OSTaskCreate(Task1, (void *)0, &Task1Stack[99], 2);
OSTaskCreate(Task2, (void *)0, &Task2Stack[255], 3);
OSStart();
return 0;
}
void Task1 (void *data)
{
int n, i;
char err;
data = data;
while(1)
{
OSSemPend(semaphorea, 1, &err);
clrscreen();
DisplayLCD("task1:sem a taken",17);
for(i=0;i<900000;i++);
for(i=0;i<900000;i++);
for(i=0;i<900000;i++);
OSTimeDly(100);
OSSemPend(semaphoreb, 1, &err);
OSTimeDly(100);
OSSemPost(semaphorea);
OSSemPost(semaphoreb);
}
}
void Task2 (void *data)
{
int n,i;
char err;
data = data;
while(1)
{
OSSemPend(semaphoreb, 1, &err);
clrscreen();
DisplayLCD("Task2:Sem b Taken",17);
for(i=0;i<900000;i++);
for(i=0;i<900000;i++);
for(i=0;i<900000;i++);
// OSTimeDly(100);
clrscreen();
DisplayLCD("priority",8);
OSTaskChangePrio(3,1);
OSSemPend(semaphorea, 1, &err);
clrscreen();
DisplayLCD("task2:sem a take",17);
OSTimeDly(100);
OSSemPost(semaphoreb);
OSSemPost(semaphorea);
}
} |