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

📄 periodicdog.c

📁 以上三个程序是基于VxWorks嵌入式操作系统C源代码程序
💻 C
字号:
/* periodicDog.c - use watchdog for periodic exec.*/
/*
DESCRIPTION
This code uses watchdogs to bark at the console.

No method is currently provided to kill all the
watchdogs!
*/

#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 + -