📄 test.c
字号:
case 2:
PC_DispStr(71, 22, "80287 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
break;
case 3:
PC_DispStr(71, 22, "80387 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
break;
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* CREATE TASKS
*********************************************************************************************************
*/
static void TaskStartCreateTasks (void)
{
INT16U TASK_2_PRIO=13;
INT16U TASK_3_PRIO=14;
INT16U TASK_4_PRIO=15;
INT16U TASK_5_PRIO=16;
TASK_2_PRIO=13+random(10);
TASK_3_PRIO=15+random(10);
TASK_4_PRIO=15+random(10);
TASK_5_PRIO=12+random(10);
OSTaskCreateExt(TaskClk,
(void *)0,
&TaskClkStk[TASK_STK_SIZE - 1],
TASK_CLK_PRIO,
TASK_CLK_ID,
&TaskClkStk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(producer,
(void *)0,
&Task2Stk[TASK_STK_SIZE - 1],
TASK_3_PRIO,
TASK_2_ID,
&Task2Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(consumer,
(void *)0,
&Task3Stk[TASK_STK_SIZE - 1],
TASK_2_PRIO,
TASK_3_ID,
&Task3Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(messagesend,
(void *)0,
&Task4Stk[TASK_STK_SIZE-1],
TASK_4_PRIO,
TASK_4_ID,
&Task4Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(messageget,
(void *)0,
&Task5Stk[TASK_STK_SIZE-1],
TASK_5_PRIO,
TASK_5_ID,
&Task5Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
}
/*$PAGE*/
/*
*********************************************************************************************************
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
*********************************************************************************************************
*/
void messagesend(void *data)
{
char txmsg;
INT8U err;
data = data;
txmsg = 'A';
for (;;) {
PC_DispChar(18, 16, txmsg, DISP_FGND_YELLOW + DISP_BGND_BLUE);
OSTimeDlyHMSM(0, 0, 1, 0);
OSMboxPost(TxMbox, (void *)&txmsg); /* Send message to Task #5 */
OSMboxPend(AckMbox, 0, &err); /* Wait for acknowledgement from Task #5 */
txmsg++; /* Next message to send */
if (txmsg == 'Z') {
txmsg = 'A'; /* Start new series of messages */
}
}
}
/*$PAGE*/
/*
*********************************************************************************************************
*********************************************************************************************************
*/
void messageget (void *data)
{
char *rxmsg;
INT8U err;
data = data;
for (;;) {
rxmsg = (char *)OSMboxPend(TxMbox, 0, &err); /* Wait for message from Task #4 */
PC_DispChar(18, 17, *rxmsg, DISP_FGND_YELLOW + DISP_BGND_BLUE);
OSTimeDlyHMSM(0, 0, 1, 0); /* 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 producer(void *pdata)
{
INT8U err;
pdata = pdata;
p=0;
y=17;
for(;;)
{
/*if(empty->OSEventCnt==0)
{
PC_DispStr(47, 14, "producer is waiting! ", DISP_FGND_YELLOW + DISP_BGND_BLUE);
//z=z+1;
}
else
PC_DispStr(47, 14, "producer is not waiting!", DISP_FGND_YELLOW + DISP_BGND_BLUE);
*/
//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(27);
y=y+1;
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);
OSTimeDly(100);
}
}
void consumer(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);
if(full->OSEventCnt==0)
{
PC_DispStr(47, 15, "consmer is waiting!", DISP_FGND_YELLOW + DISP_BGND_BLUE);
z=z+1;
}
else
PC_DispStr(47, 15, "consmer is not waiting!", DISP_FGND_YELLOW + DISP_BGND_BLUE);
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;
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);
OSTimeDly(200);
}
}
/*===================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -