本文主要是介绍GD32F4xx移植UIP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
项目背景
OpenBLT中的XCPonNET模板使用的就是uIP。
代码来源
参考uIP官方代码V1.0
也可以参考OpenBLT代码包中的uip文件夹:
目录:openblt_v011700.zip\openblt_v011700\Target\Source\third_party\uip
移植步骤
拷贝代码
从openBLT包中拷贝以下文件:
openblt_v011700.zip\openblt_v011700\Target\Source\third_party\uip (代码文件)
openblt_v011700.zip\openblt_v011700\Target\Demo\ARMCM4_STM32F4_Nucleo_F429ZI_Keil\Boot\lib\uip (移植文件)
参考代码:
uip-master.zip\uip-master\unix目录下的:
更改代码
主循环任务,参考:uip-master.zip\uip-master\unix\main.c
int
main(void)
{int i;uip_ipaddr_t ipaddr;struct timer periodic_timer, arp_timer;timer_set(&periodic_timer, CLOCK_SECOND / 2);timer_set(&arp_timer, CLOCK_SECOND * 10);tapdev_init();uip_init();uip_ipaddr(ipaddr, 192, 168, 0, 2);uip_sethostaddr(ipaddr);uip_ipaddr(ipaddr, 192, 168, 0, 1);uip_setdraddr(ipaddr);uip_ipaddr(ipaddr, 255, 255, 255, 0);uip_setnetmask(ipaddr);httpd_init();while (1){uip_len = tapdev_read();if (uip_len > 0){if (BUF->type == htons(UIP_ETHTYPE_IP)){uip_arp_ipin();uip_input();if (uip_len > 0){uip_arp_out();tapdev_send();}}else if (BUF->type == htons(UIP_ETHTYPE_ARP)){uip_arp_arpin();if (uip_len > 0){tapdev_send();}}}else if (timer_expired(&periodic_timer)){timer_reset(&periodic_timer);for (i = 0; i < UIP_CONNS; i++){uip_periodic(i);if (uip_len > 0){uip_arp_out();tapdev_send();}}/* Call the ARP timer function every 10 seconds. */if (timer_expired(&arp_timer)){timer_reset(&arp_timer);uip_arp_timer();}}}return 0;
}
测试结果
这篇关于GD32F4xx移植UIP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!