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