LWIP的调试方式

本文详细介绍了LWIP协议栈的调试方法,包括调试接口重定向、ERROR处理、DEBUG级别设置、ASSERT以及提供的stat统计信息。通过重定向printf()、设置调试开关和统计信息的收集与显示,开发者可以深入理解并优化LWIP的运行状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LWIP提供了观察和调试协议栈内部的方法。LWIP关于调试的内容在debug.h和stats.h文件中可见。

9.1 调试接口重定向

为了实现重定向 printf()函数,我们需要重写 fputc() 这个 c 标准库函数,因为 printf()在 c 标准库函数中实质是一个宏,最终是调用了 fputc()这个函数的。重定向的这部分工作,由 usart.c 文件中的 fputc(int ch, FILE *f) 这个函数来完成。

9.2 ERROR

#define LWIP_ERROR(message, expression, handler)  \
    do { if (!(expression)) { \
      LWIP_PLATFORM_ASSERT(message); handler;}} while(0)

实际就是

LWIP_ERROR(message, expression, handler) 
{
if (!(expression)) 
{ 
        LWIP_PLATFORM_ASSERT(message); 
handler;
}
}

而LWIP_PLATFORM_ASSERT(message)在cc.h中定义

#define LWIP_PLATFORM_ASSERT(x) \
    do \
    {   printf("Assertion \"%s\" failed at line %d in %s\n",\ x, __LINE__, __FILE__); \
    } while(0)
#endif

当expression不成立,则输出出错位置的行号与文件。同时调用处理函数函数。在lwip中
handler一般为 return sth;

9.3 DEBUG

#define LWIP_DEBUGF(debug, message) do { \
                               if ( \
                                   ((debug) & LWIP_DBG_ON) && \
                                   ((debug) & LWIP_DBG_TYPES_ON) && \
                                   ((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_                                     MIN_LEVEL)) { \
                                 LWIP_PLATFORM_DIAG(me
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值