standalone.h

来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· C头文件 代码 · 共 173 行

H
173
字号
/*****************************************************************************
 * File: StandAlone.h
 * Author: Naresh Gupta (nkgupta@hotmail.com)
 * Organization: Hitachi Semiconductor America Inc.
 * Purpose: This file is used to include in programs that are not supposed
 *          to run with Windows CE OS loaded. An example of such programs
 *          is SDBTESTS. It would replace windows.h.
 ****************************************************************************/

#ifndef _STANDALONE_H

#define _STANDALONE_H

/********* User modifiable parameters *********/
/*****************************************************************************
 * Define REG_ACCESS_WAIT if you want to put a wait before every READ_REGISTER...
 ****************************************************************************/
// #define REG_ACCESS_WAIT	
#define REG_WAIT	RegWait()	 /* Function to be called for waiting. */

/*****************************************************************************
 * Define NON_WINCE if you are not using Microsoft Compiler, libraries
 ****************************************************************************/
// #define NON_WINCE	/* The compiler used is not Microsoft Compiler */

/*****************************************************************************
 * To make a release version, just undef DEBUG below.
 ****************************************************************************/
// #undef DEBUG


/********* End of User modifiable parameters. *********/

/* Typedefs */
typedef unsigned char 					* ADDR;
typedef unsigned 						(*func_ptr_t)();
typedef unsigned long 					SIZE_T;

#define VOID 			void
typedef unsigned short	WCHAR;
typedef unsigned char   BYTE;
typedef short           SHORT;
typedef unsigned short  WORD;
typedef int 			BOOL;
typedef unsigned long   DWORD;
typedef unsigned long	REGISTER;
typedef unsigned long   ULONG;
typedef unsigned int   	UINT;

typedef ULONG           *PULONG;
typedef unsigned short  USHORT;
typedef USHORT          *PUSHORT;
typedef unsigned char   UCHAR;
typedef UCHAR           *PUCHAR;
typedef BYTE           	*PBYTE;
typedef char            *PSZ;
typedef volatile BYTE   *PVBYTE;
typedef volatile SHORT  *PVSHORT;
typedef volatile USHORT *PVUSHORT;
typedef volatile ULONG  *PVULONG;
typedef volatile DWORD  *PVDWORD;

#define FAR             
#define NEAR           
#define WINAPI           

typedef int (FAR WINAPI *FARPROC)();

#ifndef NULL
#define NULL 							(VOID *) 0
#endif NULL

#define		TRUE			1
#define		FALSE			0

#define printf OutputFormatString 

/* I suspect that inline is not supported in .c. Trying it out */
#define inline


/* Functions for Reading and Writing Memory/Registers. */
#ifdef REG_ACCESS_WAIT
#define READ_REGISTER_ULONG(reg) (REG_WAIT,(*(volatile unsigned long * const)(reg)))
#define WRITE_REGISTER_ULONG(reg, val) (REG_WAIT,(*(volatile unsigned long * const)(reg)) = (val))
#define READ_REGISTER_USHORT(reg) (REG_WAIT,(*(volatile unsigned short * const)(reg)))
#define WRITE_REGISTER_USHORT(reg, val) (REG_WAIT,(*(volatile unsigned short * const)(reg)) = (val))
#define READ_REGISTER_UCHAR(reg) (REG_WAIT,(*(volatile unsigned char * const)(reg)))
#define WRITE_REGISTER_UCHAR(reg, val) (REG_WAIT,(*(volatile unsigned char * const)(reg)) = (val))
#define MASK_REGISTER_ULONG(reg, val, mask) \
			WRITE_REGISTER_ULONG((reg),(READ_REGISTER_ULONG(reg) & (mask)) | (val) )
#define MASK_REGISTER_USHORT(reg, val, mask) \
			WRITE_REGISTER_USHORT((reg),(READ_REGISTER_USHORT(reg) & (mask)) | (val) )
#define MASK_REGISTER_UCHAR(reg, val, mask) \
			WRITE_REGISTER_UCHAR((reg),(READ_REGISTER_UCHAR(reg) & (mask)) | (val) )

#else REG_ACCESS_WAIT

#define READ_REGISTER_ULONG(reg) (*(volatile unsigned long * const)(reg))
#define WRITE_REGISTER_ULONG(reg, val) (*(volatile unsigned long * const)(reg)) = (val)
#define READ_REGISTER_USHORT(reg) (*(volatile unsigned short * const)(reg))
#define WRITE_REGISTER_USHORT(reg, val) (*(volatile unsigned short * const)(reg)) = (val)
#define READ_REGISTER_UCHAR(reg) (*(volatile unsigned char * const)(reg))
#define WRITE_REGISTER_UCHAR(reg, val) (*(volatile unsigned char * const)(reg)) = (val)

#define MASK_REGISTER_ULONG(reg, val, mask) \
			WRITE_REGISTER_ULONG((reg),(READ_REGISTER_ULONG(reg) & (mask)) | (val) )
#define MASK_REGISTER_USHORT(reg, val, mask) \
			WRITE_REGISTER_USHORT((reg),(READ_REGISTER_USHORT(reg) & (mask)) | (val) )
#define MASK_REGISTER_UCHAR(reg, val, mask) \
			WRITE_REGISTER_UCHAR((reg),(READ_REGISTER_UCHAR(reg) & (mask)) | (val) )
#endif  REG_ACCESS_WAIT

// Additional definitions put in by Naresh.
#ifndef READ_REGISTER_ULONG
#  define READ_REGISTER_ULONG(reg) (*(volatile unsigned long * const)(reg))
#  define WRITE_REGISTER_ULONG(reg, val) (*(volatile unsigned long * const)(reg)) = (val)
#  define READ_REGISTER_USHORT(reg) (*(volatile unsigned short * const)(reg))
#  define WRITE_REGISTER_USHORT(reg, val) (*(volatile unsigned short * const)(reg)) = (val)
#  define READ_REGISTER_UCHAR(reg) (*(volatile unsigned char * const)(reg))
#  define WRITE_REGISTER_UCHAR(reg, val) (*(volatile unsigned char * const)(reg)) = (val)
#endif


#ifdef RETAILMSG
#undef RETAILMSG
#undef TEXT
#undef DEBUGMSG
#undef ERRORMSG
#endif RETAILMSG

#define TEXT(x)					x
#ifdef DEBUG
#	define DEBUGMSG(x,y)			WriteDbgOutput(x,y)
#else DEBUG
#	define DEBUGMSG(x,y)			// WriteDbgOutput(x,y)
#endif DEBUG
#define RETAILMSG(x,y)			WriteOutput y
#define ERRORMSG(x,y)			WriteOutput y


#if 0

#ifdef NON_WINCE
#	define F_L			"%08x"
#	define F_S			"%04x"
#	define F_B			"%02x"
#else NON_WINCE
	/* SDBTESTS and Bootloader use these formats for printf */
#	define F_L			"%X"
#	define F_S			"%H"
#	define F_B			"%B"
#endif NON_WINCE

#ifdef STAND_ALONE
#   define WriteOutput printf
extern      int printf();
extern      char *gets();
char        Buf[512];   // Dummy buffer of 512 bytes to do read/write operations.
#else
void OutputFormatString(const unsigned char *sz, ...);
#   define WriteOutput OutputFormatString
#ifdef DEBUG
#	define WriteDbgOutput(a,b)    { if(a) OutputFormatString b; }
#else
#	define WriteDbgOutput(a,b)    {} // Do nothing if DEBUG is not defined.
#endif
#endif

#endif 0

#endif _STANDALONE_H

⌨️ 快捷键说明

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