lwIP

当结构体遇上宏定义,以及函数指针的高级写法(结构体中能用宏定义一个函数?)

爷,独闯天下 提交于 2019-12-03 12:11:18
一、结构体中可以定义一般的宏定义 如: struct aaa { #define STATUS_1 100 #define STATUS_2 200 #define STATUS_3 300 ........ }; 首先,这里的宏定义是在预编译阶段完成的,编译器此时并不知道什么结构体,所以这些宏是全局可见的。 一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义名字重复了最多是编译警告。可是如果不在结构体之内,名字重复可肯定是error。(未证实,可以做实验,而且可以把两处的宏定义成不同的值,会是什么情况?) 定义在结构体之内的宏在结构体内可以隐藏定义在结构体之外定义的宏,如果都在结构体之外定义,那么就是定义了两个相同的宏,而一个在内,一个在外,则结构体内只看到内部定义的宏,而结构体外只看到外部定义的宏,跟变量的隐藏类似。 宏的处理是在编译的预处理阶段完成的。预处理器根本就不认识什么结构体,在C语言编译器编译这个C文件中的结构体时,这个define语句已经不存在了。 相应的,用到这个宏的地方,宏本身也已经替换成宏的值(这个宏展开)。大家可以用gcc -E命令来只做预处理而不编译,看看出来后的文件。 至于为什么在结构体里头#deifne,是因为这个宏一般用于定义该结构体里头的标志位变量的可能的值,和结构体的这个变量密切相关。放在一起从逻辑上比较容易理解。 二

调试之断言宏

匿名 (未验证) 提交于 2019-12-03 00:39:02
LWIP_ERROR("tcp_connect: can only connect from state CLOSED", pcb->state == CLOSED, return ERR_ISCONN); #ifndef LWIP_PLATFORM_ASSERT   #define LWIP_PLATFORM_ASSERT(x) do { if(!(x)) while(1); } while(0) #endif #ifndef LWIP_NOASSERT #define LWIP_ASSERT(message, assertion) do { if(!(assertion)) \ #define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \   LWIP_PLATFORM_ASSERT(message);\   handler;}} while(0) #endif /* LWIP_ERROR */ 原文:https://www.cnblogs.com/jieruishu/p/9246749.html

LWIP学习之流程架构

匿名 (未验证) 提交于 2019-12-03 00:39:02
一 STM32F107的网络接口配置:#include "stm32_eth.h" 1.1 打开网口时钟,响应IO配置、NVIC中断;通过调用Ethernet_Configuration()配置是MII/RMII模式、PHY所需的时钟25M/50MHZ如何产生(PLL3的MCO/外部晶体)、配置ETH外设的寄存器,开启网口接受中断LwIP_Pkt_Handle-》ethernetif_input-》low_level_input &&netif->input给LWIP处理-》ETH_RxPkt_ChainMode 1.2 LWIP_Init(初始化内存堆栈、LWIP核、MAC地址、IP/掩码/网关、添加网卡并开启网卡)后轮训lwip_periodic_handle:时间状态机分别处理TCP /ARP/DHCP/DHCP粗糙处理。 1.3LWIP核初始化:根据LWIPopt.h中的配置初始化相关协议模块、堆栈、根据是否使用操作系统决定调度LWIP进程的方式。 原文:https://www.cnblogs.com/jieruishu/p/9246689.html

Does lwIP support Zeroconf?

妖精的绣舞 提交于 2019-11-30 08:42:36
I see that lwIP has some AutoIP (aka IPv4LL, aka RFC 3927 ) code, but I can't tell if it does anything higher up in the Zeroconf stack, namely mDNS and DNS-SD (with RFC 2782 ). So, does lwIP support DNS-SD service discovery? If not, would it be easy to port code from a project like Avahi that does (assuming licensing allows it)? No, lwIP does not support any part of Zeroconf except AutoIP. I've not looked at Avahi but porting Apples mDNSResponder to lwIP is quite straightforward. There is one bit of nastiness where you have to pull back the pbuf headers to access the IP header to get the

Does lwIP support Zeroconf?

自古美人都是妖i 提交于 2019-11-29 12:19:02
问题 I see that lwIP has some AutoIP (aka IPv4LL, aka RFC 3927) code, but I can't tell if it does anything higher up in the Zeroconf stack, namely mDNS and DNS-SD (with RFC 2782). So, does lwIP support DNS-SD service discovery? If not, would it be easy to port code from a project like Avahi that does (assuming licensing allows it)? 回答1: No, lwIP does not support any part of Zeroconf except AutoIP. I've not looked at Avahi but porting Apples mDNSResponder to lwIP is quite straightforward. There is

STM32407+LAN8720A+LWIP 实现TCP Client

梦想与她 提交于 2019-11-29 00:16:28
目录 硬件 一、配置CubeMax工程 二、配置系统时钟 三、配置ETH和LWIP参数 四、更改代码 五、添加API文件 正文 回到顶部 硬件 回到顶部 一、配置CubeMax工程 回到顶部 二、配置系统时钟 因为LAN8720使用的是外部25MHz的晶振,所以不需要单片机输出时钟 回到顶部 三、配置ETH和LWIP参数 回到顶部 四、更改代码 LAN8720A在初始化的时候需要复位,因此在ethernetif.c的 static void low_level_init(struct netif *netif) 函数中添加LAN8720A 的复位程序 再mian函数主循环中添加一下代码,然后编译运行,正常的话,再路由器中能看到程序中设置的MAC地址,以及分配的IP,此时能够ping通 1 MX_LWIP_Process(); 成功了?NoNoNO,如果你启动的时候没有接网线,等启动之后,再插上网线,你会发现,板子死活都不会找dhcp服务器要IP, 结果就是失联。。重大缺陷,不能忍!幸亏LWIP协议栈早就想到了这种情况,LWIP_NETIF_LINK_CALLBACK是干嘛的?就是在连接状态改变的时候,调用一个回调函数,来做相应的处理 在main函数的住循环中加入 extern struct netif *netif_default; ethernetif_set_link