微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > 关于LWIP的调试程序

关于LWIP的调试程序

时间:10-02 整理:3721RD 点击:
在SOCKET。C文件里面。LWIP_DEBUGF我已经申明过了。但这里面的 那个变量s是代表什么?应该怎么样给他赋值?
系统出现这样的警告:
Warning : C2917W: no side effect in void context: '"get_socket(%d): invalid\n"'
是不是里面的那个变量s没有赋值的原因?
static struct lwip_socket *
get_socket(int s)
{
  struct lwip_socket *sock;
  if ((s < 0) || (s > NUM_SOCKETS)) {
    LWIP_DEBUGF(SOCKETS_DEBUG, ("get_socket(%d): invalid\n", s));
    set_errno(EBADF);
    return NULL;
  }

你这个函数是不是没有贴全?差一个右花括号;
s有效时没有有效的返回值,sock也没有有效赋值,赋值前不能作为返回参数;
C2917W出现的原因应该结合LWIP_DEBUGF和SOCKETS_DEBUG的定义分析,请将get_socket、LWIP_DEBUGF和SOCKETS_DEBUG的定义贴全上来帮你分析

1.LWIP_DEBUGF的声明在debug.h文件

  1. #define LWIP_DEBUG
  2. #ifdef LWIP_DEBUG
  3. /** print debug message only if debug message type is enabled...
  4. *  AND is of correct type AND is at least LWIP_DBG_LEVEL
  5. */
  6. #define LWIP_DEBUGF(debug, message) do { \
  7.                                if ( \
  8.                                    ((debug) & LWIP_DBG_ON) && \
  9.                                    ((debug) & LWIP_DBG_TYPES_ON) && \
  10.                                    ((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \
  11.                                  LWIP_PLATFORM_DIAG(message); \
  12.                                  if ((debug) & LWIP_DBG_HALT) { \
  13.                                    while(1); \
  14.                                  } \
  15.                                } \
  16.                              } while(0)

  17. #else  /* LWIP_DEBUG */
  18. #define LWIP_DEBUGF(debug, message)
  19. #endif /* LWIP_DEBUG */

  20. #endif /* __LWIP_DEBUG_H__ */

复制代码


2.关于Warning : C2917W的介绍可以参考keil官网的手册
3.在lwIPopts.h的debug options部分有下面的定义

  1. #if 1
  2. #define U8_F "c"
  3. #define S8_F "c"
  4. #define X8_F "x"
  5. #define U16_F "u"
  6. #define S16_F "d"
  7. #define X16_F "x"
  8. #define U32_F "u"
  9. #define S32_F "d"
  10. #define X32_F "x"
  11. extern void UARTprintf(const char *pcString, ...);
  12. #define LWIP_PLATFORM_DIAG(x) {UARTprintf x;}
  13. #define LWIP_DEBUG
  14. #endif

复制代码



因此,应该改成 LWIP_DEBUGF(SOCKETS_DEBUG, ("get_socket(%"S32_F "): invalid\n", s));就可以了


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top