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

📄 periodicdog.c

📁 Vxworks的培训教程,大家分享下啊,
💻 C
字号:
/* periodicDog.c - use watchdog for periodic exec.*//*DESCRIPTIONThis code uses watchdogs to bark at the console.No method is currently provided to kill all thewatchdogs!*/#include "vxWorks.h"#include "wdLib.h"#include "taskLib.h"#include "stdio.h"#include "logLib.h"#include "semLib.h"#include "sysLib.h"#include "fioLib.h"#define PERIOD1 (2*sysClkRateGet( ))#define PERIOD2 (3*sysClkRateGet( ))LOCAL int taskId;							/* task doing periodic work */LOCAL SEM_ID semId;							/* synch. sem awaited by task*/LOCAL WDOG_ID myWdId;LOCAL void myWdRoutine1 	(	WDOG_ID myWdId	)	{	wdStart (myWdId, PERIOD1, 				(FUNCPTR) myWdRoutine1, (int) myWdId);	logMsg ("Bark bark bark\n", 0,0,0,0,0,0);	}LOCAL void myWdRoutine2	(	WDOG_ID myWdId	)	{	wdStart (myWdId, PERIOD2,				(FUNCPTR) myWdRoutine2, (int) myWdId);	semGive (semId);	}LOCAL void workDoggie (void)	{	FOREVER		{		if (semTake (semId, WAIT_FOREVER) == ERROR)			{			perror ("semTake");			exit (ERROR);			}		logMsg ("Woof Woof Woof\n", 0,0,0,0,0,0);		}	}STATUS doggieStart 	(	int type	)	{	myWdId = wdCreate ( );	if (myWdId == NULL)		{		perror ("wdCreate");		return (ERROR);		}	switch (type)		{		case 1:			wdStart (myWdId, PERIOD1,				(FUNCPTR) myWdRoutine1, (int) myWdId);			break;		case 2:			if (taskId == 0)				{				taskId = taskSpawn ("tDoggie", 60, 0,								10000,(FUNCPTR) workDoggie,								0,0,0,0,0,0,0,0,0,0);				if (taskId == NULL)					{					perror ("taskSpawn");					wdDelete (myWdId);					return ERROR;					}				semId = semCCreate (SEM_Q_FIFO, 0);				if (semId == NULL)					{					perror ("semCCreate");					wdDelete (myWdId);					taskDelete (taskId);					return ERROR;					}				}			wdStart (myWdId, PERIOD2,				(FUNCPTR)myWdRoutine2, (int) myWdId);			break;		default:			wdDelete (myWdId);			printErr ("Invalid doggie type.\n");			return ERROR;		}	return (OK);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -