📄 test.c
字号:
break;
case 1:
PC_DispStr(71, 22, " 8087 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);
break;
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)
{
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*/
/*
*********************************************************************************************************
* TASK #1
*
* Description: This task executes every 100 mS and measures the time it task to perform stack checking
* for each of the 5 application tasks. Also, this task displays the statistics related to
* each task's stack usage.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* TASK #4
*
* Description: This task sends a message to Task #5. The message consist of a character that needs to
* be displayed by Task #5. This task then waits for an acknowledgement from Task #5
* indicating that the message has been displayed.
*********************************************************************************************************
*/
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*/
/*
*********************************************************************************************************
* TASK #5
*
* Description: This task displays messages sent by Task #4. When the message is displayed, Task #5
* acknowledges Task #4.
*********************************************************************************************************
*/
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(;;)
{
OSSemPend(empty,0,&err);
data_p=65+random(27);
y=y+1;
PC_DispChar(y, 14,data_p, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
if(y==37)
{
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;
q=0;
pdata = pdata;
z=17;
for(;;)
{
if(full->OSEventCnt==0)
{
PC_DispStr(47, 15, "consmer is waiting!", DISP_FGND_YELLOW + DISP_BGND_BLUE);
z=z+1;
}
OSSemPend(full,0,&err);
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==37)
{
z=17;
}
OSSemPost(empty);
OSTimeDly(150);
}
}
/*===================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -