📄 multitask.cpp
字号:
/* multiple tasks run*/
#include "vxWorks.h"
#include "taskLib.h"
#include "stdLib.h"
#include "kernelLib.h"
#include "sysLib.h"
#include "msgQLib.h"
#include "stdio.h"
#include "semLib.h"
#include "string.h"
/*function prototypes*/
void progstart(void);
void taskOne(void);
void taskTwo(void);
void taskThree(void);
void taskFour(void);
void taskFive(void);
/*macro defined*/
#define MAX_MSGS 10
#define MAX_MSG_LEN 100
#define DELAY_TICKS 50
#define MESSAGE2 "get up"
#define MESSAGEFOUR "I HAVE RECEIVED YOUR MESSAGE"
#define MESSAGE3 "HELLO TASKFOUR"
SEM_ID mysem;
MSG_Q_ID msgQone;
MSG_Q_ID msgQtwo;
MSG_Q_ID msgQthree;
MSG_Q_ID msgQfour;
MSG_Q_ID msgQfive;
/*full variable*/
int taskIdOne,taskIdTwo,taskIdThree,taskIdFour,taskIdFive; /*ID number*/
char msgBuf3[MAX_MSG_LEN];
void progstart()
{
mysem=semBCreate(SEM_Q_PRIORITY,SEM_EMPTY);
if(mysem==NULL)
{printf("spawn the task failed");}
/*create message queue*/
if((msgQone=msgQCreate(MAX_MSGS,MAX_MSG_LEN,MSG_Q_FIFO))==NULL)
{printf("create the mesQ failed\n");}
if((msgQtwo=msgQCreate(MAX_MSGS,MAX_MSG_LEN,MSG_Q_FIFO))==NULL)
{printf("create the mesQ failed\n");}
if((msgQthree=msgQCreate(MAX_MSGS,MAX_MSG_LEN,MSG_Q_FIFO))==NULL)
{printf("create the mesQ failed\n");}
if((msgQfour=msgQCreate(MAX_MSGS,MAX_MSG_LEN,MSG_Q_FIFO))==NULL)
{printf("create the mesQ failed\n");}
if((msgQfive=msgQCreate(MAX_MSGS,MAX_MSG_LEN,MSG_Q_FIFO))==NULL)
{printf("create the mesQ failed\n");}
/*spawn the five tasks*/
if((taskIdOne=taskSpawn("task1",200,0x100,20000,(FUNCPTR)taskOne,0,0,0,0,0,0,0,0,0,0))==ERROR)
printf("taskSpawn taskOne failed\n");
if((taskIdTwo=taskSpawn("task2",140,0x100,20000,(FUNCPTR)taskTwo,0,0,0,0,0,0,0,0,0,0))==ERROR)
printf("taskSpawn taskTwo failed\n");
if((taskIdThree=taskSpawn("task3",150,0x100,20000,(FUNCPTR)taskThree,0,0,0,0,0,0,0,0,0,0))==ERROR)
printf("taskSpawn taskThree failed\n");
if((taskIdFour=taskSpawn("task4",160,0x100,20000,(FUNCPTR)taskFour,0,0,0,0,0,0,0,0,0,0))==ERROR)
printf("taskSpawn taskFour failed\n");
if((taskIdFive=taskSpawn("task5",170,0x100,20000,(FUNCPTR)taskFive,0,0,0,0,0,0,0,0,0,0))==ERROR)
printf("taskSpawn taskFive failed\n");
return;
}
void taskOne(void) /*taskone*/
{semFlush(mysem);
/*semTake(mysem,WAIT_FOREVER);
/*char msgBuf1[MAX_MSG_LEN];
msgQReceive(msgQone,msgBuf1,MAX_MSG_LEN,WAIT_FOREVER);
printf("s%\n",msgBuf1);
printf("byebye\n");
semDelete(mysem);
taskDelete(taskIdOne);
taskDelete(taskIdTwo);
taskDelete(taskIdThree);
taskDelete(taskIdFour);
taskDelete(taskIdFive);*/
}
void taskTwo(void) /*tasktwo*/
{
semTake(mysem,WAIT_FOREVER);
/*char msgBuf12[10],msgBuf13[10];*/
while(1)
{
msgQSend(msgQthree,MESSAGE2,sizeof(MESSAGE2),WAIT_FOREVER,MSG_PRI_NORMAL);
msgQSend(msgQfour,MESSAGE2,sizeof(MESSAGE2),WAIT_FOREVER,MSG_PRI_NORMAL);
semGive(mysem);}
}
void taskThree(void) /*taskthree*/
{ semTake(mysem,WAIT_FOREVER);
while(1)
{ /* char msgBuf3[MAX_MSG_LEN];*/
msgQReceive(msgQthree,msgBuf3,MAX_MSG_LEN,WAIT_FOREVER);
msgQSend(msgQfour,MESSAGE3,sizeof(MESSAGE3),WAIT_FOREVER,MSG_PRI_NORMAL);
semGive(mysem);}
}
void taskFour(void) /*taskfour*/
{semTake(mysem,WAIT_FOREVER);
char msgBuf41[MAX_MSG_LEN],msgBuf42[MAX_MSG_LEN];
while(1)
{
msgQReceive(msgQfour,msgBuf41,MAX_MSG_LEN,WAIT_FOREVER); /*receive message from task2 */
msgQReceive(msgQfour,msgBuf42,MAX_MSG_LEN,WAIT_FOREVER);
if(strcmp(msgBuf42,"HELLO TASKFOUR")==0)
{msgQSend(msgQthree,MESSAGEFOUR,sizeof(MESSAGEFOUR),WAIT_FOREVER,MSG_PRI_NORMAL);}
semGive(mysem); }}
void taskFive(void) /*taskfive*/
{semTake(mysem,WAIT_FOREVER);
while(1)
printf("task2 send :%s to task3\n",MESSAGE2);
printf("task2 send :%s to task4\n",MESSAGE2);
printf("task3 receive:%s from task2\n",msgBuf3);
printf("task3 send :%s to task4\n",MESSAGE3);
printf("task4 send :%s to task3 when it receive message from task3\n",MESSAGEFOUR);
semGive(mysem);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -