📄 test0319.cpp
字号:
#include "vxWorks.h"
#include "msgQLib.h"
#include "taskLib.h"
#include "stdio.h"
#define NUM_CLIENT 4
#define STACK_SIZE 20000
#define DELAY_TICKS 50
#define MAX_MSGS 10
#define MAX_MSG_LEN 20
#define MID_CLIENT(id) id
#define MID_SERVER NUM_CLIENT
typedef struct _MESSAGE
{
int midSend;
int midReceive;
int data;
}MESSAGE;
int tidServer;
int tidClient[NUM_CLIENT];
MSG_Q_ID msgQIdServer;
MSG_Q_ID msgQIdClient[NUM_CLIENT];
STATUS progStart();
STATUS progStop();
STATUS server();
STATUS client(int id);
STATUS progStart()
{
int id;
msgQIdServer = msgQCreate( MAX_MSGS, MAX_MSG_LEN, MSG_Q_PRIORITY );
if( msgQIdServer == NULL )
{
return ERROR;
}
for( id = 0; id < NUM_CLIENT; id++ )
{
msgQIdClient[id] = msgQCreate( MAX_MSGS, MAX_MSG_LEN, MSG_Q_PRIORITY );
if( msgQIdServer == NULL )
{
return ERROR;
}
}
tidServer = taskSpawn( "tServer", 220, 0, STACK_SIZE, (FUNCPTR)server,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
for( id = 0; id < NUM_CLIENT; id++ )
{
char tempName[20];
sprintf( tempName, "tClient%d", id );
tidClient[id] = taskSpawn( tempName, 200, 0, STACK_SIZE, (FUNCPTR)client,
id, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
}
return OK;
}
STATUS server()
{
MESSAGE rxMsg;
MESSAGE txMsg;
FOREVER
{
if( msgQReceive( msgQIdServer, (char *)&rxMsg, MAX_MSG_LEN, WAIT_FOREVER)
== ERROR )
{
return ERROR;
}
if( rxMsg.midReceive != MID_SERVER )
{
return ERROR;
}
if( rxMsg.midSend < MID_CLIENT(0) || rxMsg.midSend > MID_CLIENT(NUM_CLIENT - 1 ) )
{
return ERROR;
}
printf( "\ntServer: receive a data %d from tClient %d\n", rxMsg.data, rxMsg.midSend );
txMsg.midSend = MID_SERVER;
txMsg.midReceive = rxMsg.midSend;
txMsg.data = rxMsg.data;
if( msgQSend( msgQIdClient[rxMsg.midSend], (char *)&txMsg, sizeof(MESSAGE), WAIT_FOREVER,
MSG_PRI_NORMAL ) == ERROR )
{
return ERROR;
}
}
return OK;
}
STATUS client( int id )
{
MESSAGE rxMsg;
MESSAGE txMsg;
FOREVER
{
txMsg.midSend = MID_CLIENT( id );
txMsg.midReceive = MID_SERVER;
txMsg.data = rand();
if( msgQSend( msgQIdServer, (char *)&txMsg, sizeof(MESSAGE), WAIT_FOREVER,
MSG_PRI_NORMAL ) == ERROR )
{
return ERROR;
}
printf("\ntClient%d: transmit a data %d to tServer\n", id, txMsg.data );
if( msgQReceive( msgQIdClient[id], (char *)&rxMsg, MAX_MSG_LEN, 20 ) == ERROR )
{
printf("\ntClient%d: wait ACK timeout!!!\n", id);
return ERROR;
}
printf("\ntClient%d: receive the ACK from tServer", id);
if( txMsg.data == rxMsg.data )
{
printf(", and data check OK!\n");
}
else
{
printf(", but data check ERROR!!!\n");
printf("txdata(%d) != ACKdata(%d)\n", txMsg.data, rxMsg.data);
}
taskDelay( DELAY_TICKS + txMsg.data % DELAY_TICKS );
}
return OK;
}
STATUS progStop()
{
int id;
taskDelete( tidServer );
for( id = 0; id < NUM_CLIENT; id++ )
{
taskDelete( tidClient[id] );
}
msgQDelete( msgQIdServer );
for( id = 0; id < NUM_CLIENT; id++ )
{
msgQDelete( msgQIdClient[id] );
}
printf("Bye bye!!!\n");
return OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -