Vxworks的培训教程,大家分享下啊,

源代码在线查看: poll.c

软件大小: 744 K
上传用户: zcflion
关键词: Vxworks 培训教程
下载地址: 免注册下载 普通下载 VIP

相关代码

				#include "pioLib.h"								IMPORT DAADIO	daadio;				IMPORT PIO 		pio;								void pioPoll (port, msgQId)					int port;					MSG_Q_ID msgQId;					{					PIO_MSG_Q_DATA 	msgQData;					UINT8 			currentState;					UINT8 			lastState[PIO_MAX_CHANNELS_PER_PORT];					int 			channel;						IMPORT int 		errno;					UINT8 *			pOutputEnablePort;									/* Error checking */					if (pio.initialized == FALSE)						{						printf ("pio not initialized\n");						return;						}					/* Fail if not an input port, i.e. if the corresponding bit in the					   output enable register is on */					pOutputEnablePort = (UINT8 *) daadio.baseAddr + PIO_OUTPUT_ENABLE_OFFSET;					if (*pOutputEnablePort & (1 						{						printf ("Cannot poll an output port\n");						return;						}										/* Initialize our record of the last state of each channel to be OFF */					for (channel=0; channel						lastState[channel] = OFF;									FOREVER						{						/* check each channel in port */						for (channel=0; channel							{											/* Get the current state of the channel */							currentState = pioGet (port, channel);												/* Check to see if the current state differs from the state							   of the channel the last time we checked. If it is, we							   need to generated a message. */							if (lastState[channel] != currentState)								{												/* Initialize the message structure and send it. */								msgQData.port = port;								msgQData.channel = channel;								msgQData.state = currentState;								msgQData.timeStamp = tickGet();													if (msgQSend (msgQId, &msgQData, sizeof (PIO_MSG_Q_DATA),												 NO_WAIT, MSG_PRI_NORMAL) == ERROR)									{													/* If failure was because queue is full, just print									   warning and continue. Any other failure, print									   message and terminate. */													if (errno == S_objLib_OBJ_UNAVAILABLE)										printf ("Msg Queue full: dumping data for port %d, channel %d, status is %s at clock tick %d\n", port, channel, (currentState) ? "ON" :												"OFF", msgQData.timeStamp);									else										{										printf ("Msg Queue fatal error: aborting poll task\n");										return;										}									}																/* Update our record of the last state for this channel. */								lastState[channel] = currentState;								}							taskDelay (PIO_POLL_DELAY);							}						}					}											

相关资源