www.pudn.com > vxWorks_Lab.rar > goodProg.c


/* goodProg.c - fixes badProg.c */ 
 
#include "vxWorks.h" 
#include "semLib.h" 
#include "stdio.h" 
#include "taskLib.h" 
#include "sysLib.h" 
 
void foo(char flag); 
LOCAL SEM_ID semId; 
 
STATUS startFoo (char *pPrintStr) 
	{ 
	char flag; 
 
	flag = *pPrintStr; 
 
	if (semId == NULL) 
		{ 
		 
		if ((semId = semMCreate (SEM_Q_PRIORITY | 
							SEM_DELETE_SAFE | 
							SEM_INVERSION_SAFE)) == NULL) 
			{ 
			perror ("semMCreate failed"); 
			return ERROR; 
			} 
		} 
 
	if (taskSpawn ("tFoo", 200, 0, 5000,  
						(FUNCPTR) foo, flag, 
						0,0,0,0,0,0,0,0,0) == ERROR) 
		{ 
		perror ("taskSpawn failed"); 
		return (ERROR); 
		} 
	 
	taskDelay (sysClkRateGet () * 5); 
 
	return (OK); 
	} 
 
 
void foo (char flag) 
	{ 
	FOREVER 
		{ 
		if (semTake (semId, WAIT_FOREVER) == ERROR) 
			{ 
			perror ("semTake failed"); 
			return; 
			} 
 
		if (flag == 'y') 
			printf ("Critical nonsense...\n"); 
 
		semGive (semId); 
 
		taskDelay (sysClkRateGet() * 3); 
		} 
	}