首页 DSP技术 嵌入式开发 电源技术 单片机学习 IC设计 工业自动化 无线通讯技术 嵌入式实时操作系统
驱动开发 CAN总线 EDA技术 PCB设计 8051单片机 MSP单片机 PIC单片机 电子基础
AVR单片机 ARM学习 LED论坛 FPGA论坛 周立功单片机 mp3开发 Flash闪存 手机方案

首页->ARM学习->正文

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
<

 

相关资料:

请教一个U盘固件的问题!设计软件及IP新品介绍、评测。
仿真频率选择计算机专业、电子专业,哪个更适合搞ARM?
请问如果做静态图像处理的话ARM7的性能可以胜任么?2410运行linux调试串口输出目录是乱码【附图】
请问用uclinux一定要把源码弄懂是吗?如果只是应用呢?ARM 进入中断会自动保存什么东西的?
如果要办一个设计公司,ARM主要针对哪些客户?现在大学里开设ARM课程吗?
请大侠们指教---ADS支持AT91SAM7S256芯片吗?谁有新版RealView开发套件
哪里有免费的不受限制的keil uversion3要想学会ARM,最好找哪方面的工作?
一步一步教你开发嵌入式Linux应用程序UCOS开关中断,求教!这种像是中断方式1 不像是中断方式

Copyright © 2005-2006 电子技术学习网 和 电子电路图网 均为 单片机设计网旗下网站