一、前提:在MCU上已实现LWIP功能,外部设备可以ping通MCU
二、需求:MCU可以主动去ping外部设备
三、实现:
-
创建ICMP控制块,在主循环前执行一次即可,需要引入 "raw.h" 头文件
static struct raw_pcb *ping_pcb;
static struct pbuf *ping_buf;
int ping_init(void)
{
ping_pcb = raw_new(IP_PROTO_ICMP); //创建ICMP控制块
if (!ping_pcb)
{
return -1;
}
IP4_ADDR(&ping_pcb->local_ip, 192.168.0.100); //MCU IP地址
IP4_ADDR(&ping_pcb->remote_ip, 192.168.0.200);//MCU 要ping的设备IP
ping_buf = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr), PBUF_RAM);
if (!ping_buf)
{
return -2;
}
return 0;
}
void ping_test(void)
{
if (ping_pcb && ping_buf)
{
// ping_buf = pbuf_alloc(PBUF_IP, sizeof(struct icmp_echo_hdr), PBUF_RAM);
struct icmp_echo_hdr *iecho;
err_t err;