/* macro_common.h -- 平台公共宏定义 Id: macro_common.h,v 1.5 2006/08/31 08:56:59 wangjiong Exp $ */ /******************************************************** Copyright(C), 1999-2004 Raisecom, Inc. filename: //文件名 Author: XXX version:2004/12/20 //初始作者和版本时间 Others: THIS DOCUMENT IS GENERATED BY TORNADO TOOLS refgen.exe. EXAMPLE: ->torVars.bat ->refgen -mg -out doc driver.c ->cd doc ->htmllink ***********************************************************/ /* DESCRIPTION 平台公共宏定义 SEE ALSO */ /*********************************************************** Modified History: //文件的修改历史记录列表, //在提交文件到版本服务器时一定要填入信息,该信息会自动放在此处 * Log: macro_common.h,v $ * Revision 1.5 2006/08/31 08:56:59 wangjiong * 为pc-lint修改代码 * * Revision 1.4 2006/06/26 08:16:06 wangjiong * 修改BIT_CLEAR宏的错误 * * Revision 1.3 2006/03/14 06:14:49 zhangrongtao * 转换为dos格式 * * Revision 1.2 2006/03/13 03:08:56 zhangrongtao * 修改了opcom_dev和sadp对设备相关的剪裁方式 * * Revision 1.1.1.2 2006/03/02 05:32:46 zhangrongtao * no message * * Revision 1.1.1.1 2006/02/23 10:53:30 lch * init * ***********************************************************/ #ifndef _MACRO_COMMON_H #define _MACRO_COMMON_H /*返回a和b中的最小数*/ #ifndef MIN #define MIN(a, b) ((a) < (b)? (a): (b)) #endif /*返回a和b中的最大数*/ #ifndef MAX #define MAX(a, b) ((a) > (b)? (a): (b)) #endif /*返回不小于d的m的整数倍的最小整数*/ #ifndef RND_UP #define RND_UP(d,m) ( ((d)%(m)) ? ((d)-(d)%(m)+(m)) :(d)) #endif /*编译时取得数组a的元素个数*/ #ifndef ARRAY_NITEM #define ARRAY_NITEM(a) (sizeof(a)/sizeof((a)[0])) #endif /*假装使用一下x变量,去掉编译告警*/ #ifndef NO_USE #define NO_USE(x) ((void)(x)) #endif /*可以当作空语句使用*/ #ifndef OTP_NULL #define OTP_NULL ((void)NULL) #endif /*函数的输入参数*/ #ifndef OTP_IN #define OTP_IN #endif /*函数的输出参数*/ #ifndef OTP_OUT #define OTP_OUT #endif /*函数的输入输出参数*/ #ifndef OTP_INOUT #define OTP_INOUT #endif /*判断flag中的mask标志是否有置位了的*/ #define BIT_IS_SET(flag,mask) (((flag)&(mask)) == (mask)) /*清除flag中的mask标志*/ //#define BIT_CLEAR(flag,mask) ((flag)&=(~(mask))) /*设置 flag中的mask标志*/ //#define BIT_SET(flag,mask) ((flag)|=(mask)) #define OTP_PACK_ALIGN(x) __attribute__((packed, aligned(x))) /*获得单独一个bit*/ #define BIT_SIGNAL(x) (1 << (x)) /*包括第shift比特,向左取size比特置1,其它置0. shift从0开始,size至少1*/ /*#define BIT_MASK(shift, size) (((1 << (size)) - 1) << (shift))*/ /*wangzaizhong 20081201 修改*/ #define BIT_MASK(shift, size) (((1 << (size + shift))) - (1 << shift)) /*包括第shift比特,向左取出size比特*/ #define GET_BITS(x, shift, size) (((x) >>(shift)) & (((1 << (size)) - 1))) #define BIT_RD(val, shift, size) (((val) >> (shift)) & ((1 << (size)) - 1)) #define BIT_WR(val, shift) ((val) << (shift)) /* 没有lint告警的不循环 如果写在lint的配置文件中,对DEBUG宏的定义就不能起作用,不知道原因 Info 717: do ... while(0) */ #define WHILE_0 /*lint -save -e717 */while(0)/*lint -restore */ /* 没有lint告警的死循环 Info 716: while(1) ... */ #define WHILE_1 /*lint -save -e716 */while(1)/*lint -restore */ /* 把四个单字节无符号整数组织成一个4字节的无符号整数, B4为数值最大的字节,B1为数值最小的字节 */ #define UINT8_MAKE_UINT32(B4,B3,B2,B1) \ ((OTP_UINT32)( ((B4)<<24) + ((B3)<<16) + ((B2)<<8) + (B1) )) /* 用位域表示端口的时候需要的字节数 */ #define BYTES_FOR_PORT(nport) (((nport)+7)/8) #define OTP_LITTLE_ENDIAN #ifdef OTP_LITTLE_ENDIAN #define ntohl(x) ((((x) & 0x000000ff) << 24) | \ (((x) & 0x0000ff00) << 8) | \ (((x) & 0x00ff0000) >> 8) | \ (((x) & 0xff000000) >> 24)) #define htonl(x) ((((x) & 0x000000ff) << 24) | \ (((x) & 0x0000ff00) << 8) | \ (((x) & 0x00ff0000) >> 8) | \ (((x) & 0xff000000) >> 24)) #define ntohs(x) ((((x) & 0x00ff) << 8) | \ (((x) & 0xff00) >> 8)) #define htons(x) /*lint -save -e778 -e572*/((((x) & 0x00ff) << 8) | \ (((x) & 0xff00) >> 8)) /*lint -restore*/ #else #define ntohl(x) (x) #define ntohs(x) (x) #define htonl(x) (x) #define htons(x) (x) #endif #endif