嵌入式技术
写好C语言,使用宏定义可以防止出错,提高可移植性、可读性等。下文列举一些成熟软件中常用的宏定义。
1. 防止头文件被重复包含
2. 重新定义一些类型,使类型字节数一致,方便跨平台移植。
3. 获取指定地址上的一个字节或字
4. 求最大、最小值
5. 得到一个field在结构体(struct)中的偏移量
#define FPOS( type, field ) /*lint -e545 */ ( (dword) &(( type *) 0)-> field ) /*lint +e545 */
6. 得到一个结构体中field所占用的字节数
7. 按照LSB格式把两个字节转化为一个Word
8. 按照LSB格式把一个Word转化为两个字节
9. 得到一个变量的地址(word宽度)
10. 得到一个字的高位和低位字节
11. 返回一个比X大的最接近的8的倍数
12. 将一个字母转换为大写
#define UPCASE( c ) ( ((c) >= 'a' && (c) <= 'z') ? ((c) - 0x20) : (c) )
13. 判断字符是不是10进制的数字
14. 判断字符是不是16进制的数字
15. 防止溢出的一个方法
#define INC_SAT( val ) (val = ((val)+1 > (val)) ? (val)+1 : (val))
16. 返回数组元素的个数
17. 返回一个无符号数n尾的值MOD_BY_POWER_OF_TWO(X,n)=X%(2^n)
18. 对于IO空间映射在存储空间的结构,输入输出处理
#define inp(port) (*((volatile byte *) (port))) #define inpw(port) (*((volatile word *) (port))) #define inpdw(port) (*((volatile dword *)(port))) #define outp(port, val) (*((volatile byte *) (port)) = ((byte) (val))) #define outpw(port, val) (*((volatile word *) (port)) = ((word) (val))) #define outpdw(port, val) (*((volatile dword *) (port)) = ((dword) (val)))
19. 宏定义防止使用时错误用小括号包含。
例如:
用do{}while(0)语句包含多语句防止错误
例如:
应用时:
解决方法:
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !