📄 test.c
字号:
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(messageget,
(void *)0,
&mes2Stk[TASK_STK_SIZE-1],
mes_2_PRIO,
mes_2_ID,
&mes2Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(mutex1,
(void *)0,
&mutex1Stk[TASK_STK_SIZE-1],
mutex_1_PRIO,
mutex_1_ID,
&mutex1Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(mutex2,
(void *)0,
&mutex2Stk[TASK_STK_SIZE-1],
mutex_2_PRIO,
mutex_2_ID,
&mutex2Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
}
/*$PAGE*/
/*
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
*********************************************************************************************************
*/
void messagesend(void *data)
{
INT8U err;
data = data;
for (;;) {
//txmsg = random(50);
PC_DispChar(18, 19, txmsg, DISP_FGND_YELLOW + DISP_BGND_BLUE);
OSMboxPost(TxMbox, (void *)&txmsg);
OSTimeDlyHMSM(0, 0, 1, 0);
OSMboxPend(AckMbox, 0, &err);
}
}
/*$PAGE*/
/*
*********************************************************************************************************
*********************************************************************************************************
*/
void messageget (void *data)
{
char *rx;
INT8U err;
data = data;
for (;;) {
rx = (char *)OSMboxPend(TxMbox, 0, &err); /* Wait for message from Task #4 */
OSTimeDlyHMSM(0, 0, 1, 0);
PC_DispChar(18, 20, *rx, DISP_FGND_YELLOW + DISP_BGND_BLUE);
/* Wait 1 second */
OSMboxPost(AckMbox, (void *)1); /* Acknowledge reception of msg */
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* CLOCK TASK
*********************************************************************************************************
*/
void TaskClk (void *data)
{
char s[40];
data = data;
for (;;) {
PC_GetDateTime(s);
PC_DispStr(60, 23, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);
OSTimeDly(OS_TICKS_PER_SEC);
}
}
/*===================================================*/
void producer1(void *pdata)
{
INT8U err;
pdata = pdata;
//p=0;
//y=17;
for(;;)
{
temp1=12;
//PC_DispChar(1, 5, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPend(empty,0,&err);
//PC_DispChar(1, 6, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
data_p=65+random(10);
//data_p=65;
y=y+1;
//PC_DispChar(y, 11,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispChar(y, 12,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
if(y==27)
{
y=17;
}
OSSemPend(mutex,0,&err);
buffer[p]=data_p;
p=(p+1)%10;
OSSemPost(mutex);
OSSemPost(full);
OSTaskChangePrio(pro_1_PRIO,12+random(12));
OSTimeDly(1000);
}
}
void producer2(void *pdata)
{
INT8U err;
pdata = pdata;
//y=17;
for(;;)
{
temp2=13;
//OSTimeDly(100);
//PC_DispChar(1, 5, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPend(empty,0,&err);
//PC_DispChar(1, 6, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
data_p=75+random(10);
//data_p=66;
y=y+1;
//PC_DispChar(y, 11,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispChar(y, 13,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
if(y==27)
{
y=17;
}
OSSemPend(mutex,0,&err);
buffer[p]=data_p;
p=(p+1)%10;
OSSemPost(mutex);
OSSemPost(full);
OSTaskChangePrio(pro_2_PRIO,12+random(12));
OSTimeDly(1000);
}
}
void producer3(void *pdata)
{
INT8U err;
pdata = pdata;
//y=17;
for(;;)
{
temp3=14;
//OSTimeDly(100);
//PC_DispChar(1, 5, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPend(empty,0,&err);
//PC_DispChar(1, 6, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
data_p=85+random(10);
//data_p=67;
y=y+1;
//PC_DispChar(y, 11,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispChar(y, 14,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
if(y==27)
{
y=17;
}
OSSemPend(mutex,0,&err);
buffer[p]=data_p;
p=(p+1)%10;
OSSemPost(mutex);
OSSemPost(full);
OSTaskChangePrio(pro_3_PRIO,12+random(12));
OSTimeDly(1000);
}
}
void consumer1(void *pdata)
{
INT8U err;
//z=17;
//q=0;
pdata = pdata;
for(;;)
{
//PC_DispChar(1, 1, 65+full->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSTimeDly(100);
OSSemPend(full,0,&err);
//PC_DispChar(1, 2, 65+full->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPend(cons,0,&err);
data_c=buffer[q];
//PC_DispChar(z, 1, data_c, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
q=(q+1)%10;
OSSemPost(cons);
z=z+1;
if(temp1==12)
PC_DispStr(z, 12,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
if(temp2==13)
PC_DispStr(z, 13,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
if(temp3==14)
PC_DispStr(z, 14,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispChar(z, 15, data_c, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
if(z==27)
{
z=17;
}
//PC_DispChar(1, 3, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPost(empty);
//PC_DispChar(1, 4, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSTaskChangePrio(con_1_PRIO,12+random(12));
OSTimeDly(400);
}
}
void consumer2(void *pdata)
{
INT8U err;
pdata = pdata;
for(;;)
{
OSTimeDly(150);
//PC_DispChar(1, 1, 65+full->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPend(full,0,&err);
//PC_DispChar(1, 2, 65+full->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPend(mutex,0,&err);
data_c=buffer[q];
q=(q+1)%10;
OSSemPost(mutex);
z=z+1;
//OSTimeDly(334);
if(temp1==12)
PC_DispStr(z, 12,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
if(temp2==13)
PC_DispStr(z, 13,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
if(temp3==14)
PC_DispStr(z, 14,"-", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispChar(z, 16, data_c, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
if(z==27)
{
z=17;
}
//PC_DispChar(1, 3, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPost(empty);
OSTaskChangePrio(con_2_PRIO,12+random(12));
//PC_DispChar(1, 4, 65+empty->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSTimeDly(400);
}
}
/*===================================================*/
void mutex1(void *pdata)
{
INT8U err;
pdata = pdata;
for(;;)
{
//PC_DispChar(1, 3,65+mut->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPend(mut,0,&err);
PC_DispStr(17, 8,"mutex1 is running", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(17, 9,"mutex2 is waiting", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPost(mut);
OSTimeDly(150);
}
}
void mutex2(void *pdata)
{
INT8U err;
pdata = pdata;
for(;;)
{
//PC_DispChar(1, 4,65+mut->OSEventCnt, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPend(mut,0,&err);
OSTimeDly(100);
PC_DispStr(17, 8,"mutex1 is waiting", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(17, 9,"mutex2 is running", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPost(mut);
OSTimeDly(200);
}
}
void messinput(void)
{
PC_DispStr(0,18 ,"input message :", DISP_FGND_YELLOW + DISP_BGND_BLUE);
gotoxy(19,19);
scanf("%c",&txmsg);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -