📄 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;
}
}
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(producer1,
(void *)0,
&pro1Stk[TASK_STK_SIZE - 1],
pro_1_PRIO,
pro_1_ID,
&pro1Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(consumer1,
(void *)0,
&con1Stk[TASK_STK_SIZE - 1],
con_1_PRIO,
con_1_ID,
&con1Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(messagesend,
(void *)0,
&mes1Stk[TASK_STK_SIZE-1],
mes_1_PRIO,
mes_1_ID,
&mes1Stk[0],
TASK_STK_SIZE,
(void *)0,
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);
}
void messagesend(void *data)
{
char txmsg;
INT8U err,bz;
bz=14;
data = data;
txmsg = 'A';
for (;;) {
PC_DispChar(sz++, 19, txmsg, DISP_FGND_YELLOW + DISP_BGND_BLUE);
PC_DispChar(bz++, 19, ' ', DISP_BGND_LIGHT_GRAY);//DISP_BGND_LIGHT_GRAY DISP_FGND_YELLOW + DISP_BGND_BLUE
OSTimeDly(30);
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 */
}
if(sz==50)
{
sz=18;
}
if(bz==50)
{
bz=14;
}
}
}
void messageget (void *data)
{
char *rxmsg;
INT8U err,bz;
bz=13;
data = data;
for (;;) {
rxmsg = (char *)OSMboxPend(TxMbox, 0, &err); /* Wait for message from Task #4 */
PC_DispChar(gz++, 20, *rxmsg, DISP_FGND_YELLOW + DISP_BGND_BLUE);
PC_DispChar(bz++, 20,' ', DISP_BGND_LIGHT_GRAY);
OSTimeDly(30);
OSMboxPost(AckMbox, (void *)1); /* Acknowledge reception of msg */
if(gz==49)
{
gz=17;
}
if(bz==49)
{
bz=13;
}
}
}
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;
for(;;)
{
OSSemPend(empty,0,&err);
data_p=65+random(10);
y=y+1;
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(600);
}
}
void consumer1(void *pdata)
{
INT8U err;
pdata = pdata;
for(;;)
{
OSTimeDly(100);
OSSemPend(full,0,&err);
OSSemPend(cons,0,&err);
data_c=buffer[q];
q=(q+1)%10;
OSSemPost(cons);
z=z+1;
PC_DispStr(z, 12,"-", 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;
}
OSSemPost(empty);
OSTaskChangePrio(con_1_PRIO,12+random(12));
OSTimeDly(600);
}
}
void mutex1(void *pdata)
{
INT8U err;
pdata = pdata;
for(;;)
{
OSSemPend(mut,0,&err);
PC_DispStr(17, 8,"Task1 is running", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(17, 9,"Task2 is waiting", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPost(mut);
OSTimeDly(100);
}
}
void mutex2(void *pdata)
{
INT8U err;
pdata = pdata;
for(;;)
{
OSSemPend(mut,0,&err);
PC_DispStr(17, 8,"Task1 is waiting", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr(17, 9,"Task2 is running", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSSemPost(mut);
OSTimeDly(200);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -