一步步移植uCOS-II and LwIP (三)
来源:互联网 发布:淘宝的会员管理系统 编辑:程序博客网 时间:2024/05/16 20:29
3、LwIP跑起来
在前两小节中,我们详细介绍了lwip移植涉及的核心函数。至于cc.h、cpu.h、lwipopts.h的中有关数据类型、字节对齐和调试信息的配置,网络资源很丰富,也基本上大同小异,本文就不做介绍。需要说明的是,前两小节移植借鉴和参阅了网络上许多其他人的成果。接下来我们要lwip跑起来,先上主程序:
//Other initiation do not list Timer_Config(); // 10ms interval for lwip LWIP_Init(); //lwip system init while(1) { LWIP_Pkt_Handle(); LWIP_Periodic_Handle(localtime); }
各个子程序如下:
uint32_t TCPTimer = 0;uint32_t ARPTimer =0;uint32_t DHCPfineTimer =0;uint32_t DHCPcoarseTimer;#define TCP_TMR_INTERVAL 250#define ARP_TMR_INTREVAL 5000#define DHCP_FINE_TIMER_MSECS 500#define DHCP_COARSE_TIMER_MSECS 6000struct netif dm9000if;void LWIP_Init(void){ ip_addr_t ipaddr, netmask, gw; lwip_init(); IP4_ADDR(&ipaddr,IP_ADDR0,IP_ADDR1,IP_ADDR2,IP_ADDR3); IP4_ADDR(&netmask,NETMASK_ADDR0,NETMASK_ADDR1,NETMASK_ADDR2,NETMASK_ADDR3); IP4_ADDR(&gw,GW_ADDR0,GW_ADDR1,GW_ADDR2,GW_ADDR3); netif_add(&dm9000if,&ipaddr,&netmask,&gw,NULL,ethernetif_init,ethernet_input); netif_set_default(&dm9000if); netif_set_up(&dm9000if);}void LWIP_Pkt_Handle(void){ ethernetif_input(&dm9000if); //read data from net interface}/*** @brief LwIP periodic tasks* @param localtime the current LocalTime value* @retval None*/void LWIP_Periodic_Handle( uint32_t localtime){#if LWIP_TCP /* TCP periodic process every 250 ms */ if (localtime - TCPTimer >= TCP_TMR_INTERVAL) { TCPTimer = localtime; tcp_tmr(); }#endif /* ARP periodic process every 5s */ if ((localtime - ARPTimer) >= ARP_TMR_INTERVAL) { ARPTimer = localtime; etharp_tmr(); }#ifdef USE_DHCP /* Fine DHCP periodic process every 500ms */ if (localtime - DHCPfineTimer >= DHCP_FINE_TIMER_MSECS) { DHCPfineTimer = localtime; dhcp_fine_tmr(); if ((DHCP_state != DHCP_ADDRESS_ASSIGNED) && (DHCP_state != DHCP_TIMEOUT) && (DHCP_state != DHCP_LINK_DOWN)) { /* toggle LED1 to indicate DHCP on-going process */ // STM_EVAL_LEDToggle(LED1); /* process DHCP state machine */ LwIP_DHCP_Process_Handle(); } } /* DHCP Coarse periodic process every 60s */ if (localtime - DHCPcoarseTimer >= DHCP_COARSE_TIMER_MSECS) { DHCPcoarseTimer = localtime; dhcp_coarse_tmr(); }#endif}
LWIP_Init():完成lwip内部初始化及网口的注册;
LWIP_Pkt_Handle(void):周期性查询网口是否接收到数据,也可采用中断的方式;
LWIP_Periodic_Handle( uint32_t localtime):lwip内核需要周期性调用时间处理函数进行轮询操作,TIMER2提供10ms中断;
下载程序后,使用windows的命令行工具ping硬件平台的IP地址,即 ping 192.168.0.10。
在ping的过程中观察“本地连接 状态”,发现两个小电脑之间闪烁,表明有数据通信,当数据回显完成后,两个小电脑又变成了灰色。
至此,lwip在无操作系统下的移植工作已经完成,先撇开uCOS-II系统进行移植,主要是为了对lwip协议栈有个初步的认识,为后续操作系统下的移植做好工作。下一步的工作是将实时操作系统移植到硬件平台上。
0 0
- 一步步移植uCOS-II and LwIP (三)
- 一步步移植uCOS-II and LwIP (一)
- 一步步移植uCOS-II and LwIP (二)
- 一步步移植uCOS-II and LwIP (四)
- LPC2388+UCOS/II+LWIP移植
- UCOS移植LWIP
- s3c2440上ucos-ii下lwip移植成功
- lpc2200移植ucos-II总结(三 编写OS_CPU.h)
- ucos-II(三)
- LWIP UCOS 移植步骤记录
- 认识uCOS-II(三)
- LWIP-1.3.0在S3C2440平台UCOS-II-2.8.6系统上的移植过程DEBUG
- uCOS-II移植(Freescale MPC5644A)
- STM32移植uCOS-II系统(1)
- STM32移植uCOS-II系统(2)
- ucos-ii移植
- 移植ucos II
- STM32移植uCOS-II
- jQuery pjax 应用简单示例
- SIM卡询问框是如何弹出的?
- UIButton textAlignment设置和一些属性设置
- linux下安装JDK
- python3+PyQt5 实现单文档界面(SDI)
- 一步步移植uCOS-II and LwIP (三)
- java web 环境
- Shell 函数
- 我的Python学习之旅(01)
- oracle删除oem中自动备份job
- php rsa加密解密实例
- CentOS7安装Hadoop2.7完整流程
- 例题7-7 UVA 1354 Mobile Computing (搜索+二叉树(类哈夫曼树))
- X64的函数调用规则