跨平台是软件的一个重要指标。一般程序可分为平台无关和平台相关两部分,平台相关部分主要涉及外围设备(如串口、键盘、鼠标、LCD等)和操作系统API(如定时器、互斥锁、文件系统操作、线程操作等)。
除了程序本身的跨平台需求外,还有种应用是对目标机的模拟,例如在PC上模拟一些嵌入式平台的应用,一来可以方便用户体验产品功能,二来Windows友好的开发环境,程序调试很方便。
所以,可以定义这样一组接口,接口的实现平台相关,由平台无关部分调用。如下所示:
class VArchOper
{
public:
//套接字接口
void startSocket();
void nonBlkSocket( int sock );
void closeSocket( int sock );
//显存接口
int initDspDev( int buf[] ); //提供显示属性:屏幕尺寸,色深,显存指针
//输入接口
//触控接口
int getTouchInf( int buf[] );
int ctrTouchInf( int cmd, void *arg );
//键盘接口
int getKeybdInf( int buf[] );
//定时器接口
int initTimer( void (*hd)( int ) );
int loadClock( int clock[] ); //时钟函数(年月日时分秒)
int loadSysTime( int tm[] ); //系统时间(秒,微妙)
int cvtSysTm2Clock( const int sysTm[], int clock[] );
//互斥操作
void initMutex( void *m );
void delMutex( void *m );
void lockMutex( void *m );
void unlockMutex( void *m );
//文件夹操作
void loadCurDir( char name[], int len );
int createDir( const char *name );
void * openDir( const char *name );
int isFolder( void *dir, const char *baseDir );
void * listDir( void *dir, char name[] );
void closeDir( void *dir );
//文件操作
void loadFileInf( const char *name, int inf[] );
void rmFile( const char *name );
//延时操作
void sleepMs( int ms);
//线程接口
int createThread( void *(*start_routine)(void *), void * arg, int IsDetach = FALSE );
//......其他接口.....
};
这组接口应该尽可能小,只包含平台相关部分。不断扩充后,可以作为小范围的标准接口,其他程序则可以省去平台相关部分的编写工作。