这几天在学习lwip,由于stm32f2的官方默认的lwip的版本是1.3.2的,于是就想把它换成1.4.1的,在官网下载了相应的库,移植后发现功能正常,但是ping超时,通过一番追踪发现,在icmp_input函数里面
#if CHECKSUM_GEN_ICMP
/* adjust the checksum */
if (iecho->chksum >= PP_HTONS(0xffffU - (ICMP_ECHO << 8))) {
iecho->chksum += PP_HTONS(ICMP_ECHO << 8) + 1;
} else {
iecho->chksum += PP_HTONS(ICMP_ECHO << 8);
}
#else /* CHECKSUM_GEN_ICMP */
iecho->chksum = 0;
#endif /* CHECKSUM_GEN_ICMP */
由于这个编译时默认编译了软件的校验,但是st又使用了硬件校验,导致了重复校验,所以返回的ping包出错了。
所以我们只需要在lwipopts.h里把
#define CHECKSUM_GEN_ICMP 0
加上就屏得通了。 |