📄 periodicdog.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 + -