当前位置: 首页 > news >正文

门户网站建设公司渠道消防做设计有什么网站

门户网站建设公司渠道,消防做设计有什么网站,设计师网站崩了,自己做网站价格前言 本文对lwip中debug.h文件里的调试相关宏进行分析。 正文 debug.h中有3个重要的调试相关宏: LWIP_ASSERT(message, assertion) LWIP_ERROR(message, expression, handler) LWIP_DEBUGF(debug, message) 断言 LWIP_ASSERT(message, assertion) 源代码为&…

前言

本文对lwip中debug.h文件里的调试相关宏进行分析。

正文

debug.h中有3个重要的调试相关宏:
LWIP_ASSERT(message, assertion)
LWIP_ERROR(message, expression, handler)
LWIP_DEBUGF(debug, message)

断言

LWIP_ASSERT(message, assertion)
源代码为:

#define LWIP_ASSERT(message, assertion) do { if (!(assertion)) { \LWIP_PLATFORM_ASSERT(message); }} while(0)

message为断言触发时输出的字符串,assertion为一个布尔值,展开后:

if (!(assertion))
{printf("Assertion \"%s\" failed at line %d in %s\n", message, __LINE__, __FILE__); fflush(NULL);  //更新文件系统abort();	   //程序中止运行
}

当判断条件不为真时,打印断言原因,输出断言所在文件名和文件中行数,更新文件系统 ,中止程序运行。
例子:

err_t
ethernetif_init(struct netif *netif)
{struct ethernetif *ethernetif;LWIP_ASSERT("netif != NULL", (netif != NULL));。。。。。。/* initialize the hardware */low_level_init(netif);return ERR_OK;
}

网卡初始化部分代码,当传入指针为空时,触发断言。

错误处理

LWIP_ERROR(message, expression, handler)
源码为:

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

message为一段错误发生时输出的字符串,expression为错误判断条件,handler为一段代码,展开如下:

if (!(expression)
{printf(message);handler;
}

当判断条件不为真后,输出错误原因,执行错误处理代码handler
例子:

err_t
netconn_getaddr(struct netconn *conn, ip_addr_t *addr, u16_t *port, u8_t local)
{API_MSG_VAR_DECLARE(msg);err_t err;LWIP_ERROR("netconn_getaddr: invalid conn", (conn != NULL), return ERR_ARG;);LWIP_ERROR("netconn_getaddr: invalid addr", (addr != NULL), return ERR_ARG;);LWIP_ERROR("netconn_getaddr: invalid port", (port != NULL), return ERR_ARG;);。。。。。。return err;
}

传入指针为空,打印错误原因,返回ERR_ARG错误码。

调试打印

LWIP_DEBUGF(debug, message)
源码为:

#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(message); \if ((debug) & LWIP_DBG_HALT) { \while(1); \} \} \} while(0)

debug包含了多个用于控制调试行为的位标志。message是要调试打印的字符串。
展开后:

if (((debug) & LWIP_DBG_ON) && ((debug) & LWIP_DBG_TYPES_ON)) && ((signed short)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL))
{printf(message);if ((debug) & LWIP_DBG_HALT){	while(1);}
}

其中:

#define LWIP_DBG_TYPES_ON               LWIP_DBG_ON
/** flag for LWIP_DEBUGF to enable that debug message */
#define LWIP_DBG_ON            0x80U
/** flag for LWIP_DEBUGF to disable that debug message */
#define LWIP_DBG_OFF           0x00U

可见LWIP_DBG_TYPES_ONLWIP_DBG_ON是一样的,都是0x80U
debug的第15位置1时,开启调试打印。

#define LWIP_DBG_MASK_LEVEL    0x03

表示debug的低两位是调式等级。

#define LWIP_DBG_MIN_LEVEL              LWIP_DBG_LEVEL_ALL
/** Debug level: ALL messages*/
#define LWIP_DBG_LEVEL_ALL     0x00
/** Debug level: Warnings. bad checksums, dropped packets, ... */
#define LWIP_DBG_LEVEL_WARNING 0x01
/** Debug level: Serious. memory allocation failures, ... */
#define LWIP_DBG_LEVEL_SERIOUS 0x02
/** Debug level: Severe */
#define LWIP_DBG_LEVEL_SEVERE  0x03

表示有4个调试等级。
debug低两位表示的调式等级高于LWIP_DBG_MIN_LEVEL时,开启调试打印。

#define LWIP_DBG_HALT          0x08U

表示当debug的第3为置1时,打印调试信息后,进入while循环中止程序运行。

在opt.h文件中包含了lwip所有的调试标志,如下:

#define ETHARP_DEBUG                    LWIP_DBG_OFF
#define NETIF_DEBUG                     LWIP_DBG_OFF
#define PBUF_DEBUG                      LWIP_DBG_OFF
#define API_LIB_DEBUG                   LWIP_DBG_OFF
#define API_MSG_DEBUG                   LWIP_DBG_OFF
#define SOCKETS_DEBUG                   LWIP_DBG_OFF
。。。。。。

表示这些调试打印都关闭了,如果把LWIP_DBG_OFF换成LWIP_DBG_ON则开启对应的调试打印。

例子:

err_t
ethernetif_init(struct netif *netif)
{struct ethernetif *ethernetif;ethernetif = mem_malloc(sizeof(struct ethernetif));if (ethernetif == NULL){LWIP_DEBUGF(NETIF_DEBUG, ("ethernetif_init: out of memory\n"));return ERR_MEM;}。。。。。。return ERR_OK;
}

opt.h文件中NETIF_DEBUG宏定义为LWIP_DBG_ON时,则运行到这里时打印后面的字符串。

http://www.yayakq.cn/news/493870/

相关文章:

  • 帮客户做违法网站违法么护理专业简历
  • 域名服务网站建设科技公司网络规划设计师是高级工程师吗
  • 电脑系统做的好的网站东莞哪家建网站公司好
  • 做旅游的网站的要素潍坊互联网推广
  • 网站系统建设预算wordpress 评论模块
  • 手机端模板网站360建筑网一级消防工程师招聘
  • flash网站整站源码免费下载大连做外贸建站的专业公司
  • 词爱站的关键词哈尔滨市呼兰区住房城乡建设局网站
  • 产品网站建设公司搜索广告是什么意思
  • 如何欣赏网站蚌埠网络科技有限公司
  • 258网站建设网络设备具体有哪些
  • 网站信息内容建设 宣传部门文字图片制作器
  • 北京网站搭建服务商vi视觉形象设计
  • 上海网站开发公司排名巴中哪里可以做公司网站
  • 网站采集注意网站检测工具
  • 如何做一个手机网站免费咨询律师的电话是多少
  • 公司做百度网站要多少钱怎么做黑彩黑彩网站
  • 律师做网络推广哪个网站好郴州网站建设
  • 商务网站建设个人总结珠海中企网站建设
  • 黑河做网站的公司系统开发是什么意思
  • 中国北京门户网站建设调查报告网页代码怎么打开
  • 网站开发电子书新网站建设运营年计划书
  • wordpress网站的CDN设置普陀区建设工程质检网站
  • 网站建设综合训练的实验目的腾讯云服务器怎么搭建网站
  • steam怎么注册域名肇庆网站优化建设
  • 功能型pc端网站框架120平三室两厅简约装修
  • 找外国男人做老公网站zt16j门户网
  • 做视频网站推广挣钱吗哪些网站seo做的好
  • 免费APP 微信 网站平台揭阳网站制作计划
  • 上海网站建设 微信开发公司哪家好网站建设推广机构