⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multitask.cpp

📁 在vxworks 下多任务小程序
💻 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 + -