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

📄 err.c

📁 Vxworks的培训教程,大家分享下啊,
💻 C
字号:
#include "vxWorks.h"#define FL		__FILE__, __LINE__IMPORT int errno;void daadioErr (file, line, error, fmtStr, p1, p2, p3, p4, p5)	char *	file;	int		line;	int		error;	char *	fmtStr;	int		p1;	int		p2;	int		p3;	int		p4;	int		p5;	{	IMPORT int	errno;#ifdef DEBUG	if (intContext() == TRUE)		{		logMsg ("Errno %#x in %s at line %d\n", error, file, line);		if (fmtStr)			logMsg (fmtStr, p1, p2, p3, p4, p5);		}	else		{		printErr ("Error in %s at line %d: ", file, line);		printErrno (error);		if (fmtStr)			printErr (fmtStr, p1, p2, p3, p4, p5);		}#endif DEBUG	errno = error;	}#include "pioLib.h"IMPORT DAADIO daadio;PIO pio;STATUS pioInit (outputEnableMask)	UINT8 outputEnableMask;	/* Mask to set which are output ports */	{	UINT8 *	pOutputEnablePort;	int 	port;	UINT8 *	pPort;	/* If daadioInit() has not been called, fail */	if (daadio.initialized == FALSE)		{		printf ("daadio not initialized\n");		return (ERROR);		}	/* If mutex semaphore has not been created, do it now */	if (pio.mutexSem == NULL)		{		if ((pio.mutexSem = semMCreate (SEM_Q_PRIORITY|SEM_DELETE_SAFE|									SEM_INVERSION_SAFE)) == NULL)			return (ERROR);		}	/* Initialize <pOutputEnablePort> to point to the output enable register */	pOutputEnablePort = (UINT8 *)daadio.baseAddr + 						PIO_OUTPUT_ENABLE_OFFSET;	/* Set the output enable register to the mask the user passed us */	*pOutputEnablePort = outputEnableMask;	/* Reset all output channels */	for (port=0; port<PIO_MAX_PORTS; port++, outputEnableMask>>=1)		{		if (outputEnableMask & 1) 			{			pPort = (UINT8 *) daadio.baseAddr + PIO_PORT_NUM_TO_OFF (port);			*pPort = (UINT8)0;			}		}	pio.initialized = TRUE;	return (OK);	}STATUS pioSet (port, channel, state)	int port, channel;	BOOL state;	{	UINT8 *pPort;	/* pointer to port register */	int channelBit;	/* bit which reflect which channel is being set */	/* Error checking...	 * Ensure pioInit() routine has been called 	 * and the port and channel are within range.	 */		if (pio.initialized == FALSE)		{		daadioErr (FL, 0, "pio NOT initialized\n");		printf ("pio not initialized\n");		return (ERROR);		}	if (port < 0 || port >= PIO_MAX_PORTS)		{		printf ("port number out of range\n");		return (ERROR);		}	if (channel < 0 || channel >= PIO_MAX_CHANNELS_PER_PORT)		{		printf ("channel number out of range\n");		return (ERROR);		}	if ((*((UINT8 *)daadio.baseAddr + PIO_OUTPUT_ENABLE_OFFSET) & (1 << port)) 		== 0)		{		printf ("can not set an input port\n");		return (ERROR);		}		/* Initialize <pPort> to point to the appropriate port */	pPort = (UINT8 *) daadio.baseAddr +  PIO_PORT_NUM_TO_OFF (port);	/* Set a bit in <channelBit> which reflects which channel is being set, 	   i.e. if channel 0, set bit 0; if channel 1, set bit 1; and so on. */	channelBit = 1 << channel;	/* Update the port register pointed to by <pPort> to be set or unset	   based on the value of <state>. Since this is a read/modify/write	   operation, mutual exclusion needs to be assured. */	if (semTake (pio.mutexSem, WAIT_FOREVER) == ERROR)		return (ERROR);	if (state)		*pPort |=  channelBit;	else		*pPort &= ~channelBit;	semGive (pio.mutexSem);		return (OK);	}int pioGet (port, channel)	int port, channel;	{	UINT8 *pPort;	/* pointer to port register */	int channelBit;	/* bit which reflects which channel is being tested */	BOOL state;		/* whether channel is ON or OFF */	/* Error checking...	 * Ensure that pioInit() routine has been called 	 * and the port and channel are within range.	 */		if (pio.initialized == FALSE)		{		printf ("pio not initialized\n");		return (ERROR);		}	if (port < 0 || port >= PIO_MAX_PORTS)		{		printf ("port number out of range\n");		return (ERROR);		}	if (channel < 0 || channel >= PIO_MAX_CHANNELS_PER_PORT)		{		printf ("channel number out of range\n");		return (ERROR);		}		/* Initialize <pPort> to point to the appropriate port */	pPort = (UINT8 *) daadio.baseAddr +  PIO_PORT_NUM_TO_OFF (port);	/* Set a bit in <channelBit> which reflects which channel is being set, 	   i.e. if channel 0, set bit 0; if channel 1, set bit 1; and so on. */	channelBit = 1 << channel;	/* Set <state> to be ON or OFF depending on the state of the channel */	state = (*pPort & channelBit) ? ON : OFF;		return (state);	}

⌨️ 快捷键说明

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