| 首页 | DSP技术 | 嵌入式开发 | 电源技术 | 单片机学习 | IC设计 | 工业自动化 | 无线通讯技术 | 嵌入式实时操作系统 |
| 驱动开发 | CAN总线 | EDA技术 | PCB设计 | 8051单片机 | MSP单片机 | PIC单片机 | 电子基础 |
| AVR单片机 | ARM学习 | LED论坛 | FPGA论坛 | 周立功单片机 | mp3开发 | Flash闪存 | 手机方案 |
LWIP 中的ip_addr.h的疑问
问题: #define ip_addr_debug_print(debug, ipaddr) LWIP_DEBUGF(debug, ("%"U16_F".%"U16_F".%"U16_F".%"U16_F, \
ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff:0, \
ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff:0, \
ipaddr?(u16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff:0, \
ipaddr?(u16_t)ntohl((ipaddr)->addr) & 0xff:0U))
这个里面的%"U16_F"到底是什么意思?
还有下面的\又是什么意义?
回答 1:不知道他用的什么编译器。可以考虑直接改成%U这样的形式,否则编译都通不过。记得当时我就这么干。
如果不要调试信息,把那个宏指空也可以了。
回答 2:这是为了解决移植性问题所做的改进 在某些平台中格式描述符“%d”表示一个32bit的int类型,而在另外平台中“%d”表示一个16bit的int类型。
增加_F宏的想法是为了拥有一个尺寸类型标识来区分(sn)printf描述字符串中的每一种类型。“U16_F”要在cc.h中定义。
例如:c16x移植范例中的cc.h
typedef unsigned char u8_t;
typedef signed char s8_t;
typedef unsigned short u16_t;
typedef signed short s16_t;
typedef unsigned long u32_t;
typedef signed long s32_t;
typedef u32_t mem_ptr_t;
/* Define (sn)printf formatters for these lwIP types */
#define U16_F "hu"
#define S16_F "hd"
#define X16_F "hx"
#define U32_F "lu"
#define S32_F "ld"
#define X32_F "lx"
"%"U16_F".%"U16_F".%"U16_F".%"U16_F的意思就是:%hu.%hu.%hu.%hu。
"\"是连字符,表示这些语句是写在一行里的,为了清晰,把他们写在了不同行,其实是一行。
例如:
printf(" \
%d\n", \
a);
就表示:
printf("%d\n", a);
www.ARMecos.com
<
相关资料:
| Copyright © 2005-2006 电子技术学习网 和 电子电路图网 均为 单片机设计网旗下网站 |