📄 fifoq0.c
字号:
/* fifoQ0.c - demonstrate the Haas effect with WindView */#include "vxWorks.h"#include "msgQLib.h"#include "taskLib.h"#include "semLib.h"#include "wvLib.h"#include "stdio.h"#define MSGS_MAX (5) /* Queue dimensions */#define MSG_SIZE_MAX (64)#define PRI_RECV_LOW (150) /* Task priorities */#define PRI_RECV_MED (125)#define PRI_SEND (100)#define OPTS (0)#define STACK_SIZE (20000)MSG_Q_ID theQ = NULL;SEM_ID syncSem = NULL;int tSend; /* Task IDs */int tRecvLow;int tRecvMed;char message [] = "My bonnie lies over the ocean.";int countLow;int countMed;LOCAL BOOL started = FALSE;LOCAL void send (void); /* Task entry point functions */LOCAL void recvLow (void);LOCAL void recvMed (void);STATUS fifoQStart (void) { if (started) { printf ("Already started.\n"); return ERROR; } countLow = 0; countMed = 0; if (theQ == NULL) theQ = msgQCreate (MSGS_MAX, MSG_SIZE_MAX, MSG_Q_FIFO); if (syncSem == NULL) syncSem = semBCreate (SEM_Q_FIFO, SEM_EMPTY); if (theQ == NULL || syncSem == NULL) { printf ("Couldn't start demonstration.\n"); return ERROR; } if ( (tRecvLow = taskSpawn ("tRecvLow", PRI_RECV_LOW, OPTS, STACK_SIZE, (FUNCPTR) recvLow, 0,0,0,0,0,0,0,0,0,0)) == ERROR || (tRecvMed = taskSpawn ("tRecvMed", PRI_RECV_MED, OPTS, STACK_SIZE, (FUNCPTR) recvMed, 0,0,0,0,0,0,0,0,0,0)) == ERROR || (tSend = taskSpawn ("tSend", PRI_SEND, OPTS, STACK_SIZE, (FUNCPTR) send, 0,0,0,0,0,0,0,0,0,0)) == ERROR) { printf ("Couldn't spawn tasks.\n"); return ERROR; } started = TRUE; return OK; }STATUS fifoQStop (void) { char dummy [1]; if (!started) { printf ("Not started.\n"); return ERROR; } taskDelete (tSend); taskDelete (tRecvMed); taskDelete (tRecvLow); while (semTake (syncSem, NO_WAIT) == OK) ; while (msgQReceive (theQ, dummy, 1, NO_WAIT) != ERROR) ; started = FALSE; return OK; }LOCAL void send (void) { FOREVER { taskDelay (1); msgQSend (theQ, message, sizeof (message), MSG_PRI_NORMAL, WAIT_FOREVER); semGive (syncSem); } }LOCAL void recvLow (void) { char msg [MSG_SIZE_MAX]; FOREVER { msgQReceive (theQ, msg, sizeof (msg), WAIT_FOREVER); ++countLow; wvEvent (1, (char *) &countLow, sizeof (countLow)); printf ("Message received: %s\n", msg); } }LOCAL void recvMed (void) { char msg [MSG_SIZE_MAX]; FOREVER { semTake (syncSem, WAIT_FOREVER); msgQReceive (theQ, msg, sizeof (msg), WAIT_FOREVER); ++countMed; wvEvent (2, (char *) &countMed, sizeof (countMed)); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -