原正点原子的移植教程基于之前的内存管理,且在处理LwIP定时事件时没有使用1.4.1版本中自带的处理函数sys_check_timeouts(),本文在正点原子的DM9000驱动程序下修改了一些移植过程,记录流程以备以后查看使用。
#ifndef __PERF_H__
#define __PERF_H__
#define PERF_START //空定义
#define PERF_STOP(x) //空定义
#endif /* __PERF_H__ */
3.lwipopt.h
对内核的参数配置,否则使用opt.h中默认参数
2.在ethernetif.h中添加函数声明和网卡名称
#ifndef __ETHERNETIF_H__
#define __ETHERNETIF_H__
#include "lwip/err.h"
#include "lwip/netif.h"
#define IFNAME0 'L'
#define IFNAME1 'Y'
err_t ethernetif_init(struct netif *netif);
err_t ethernetif_input(struct netif *netif);
#endif
3.读取网卡数据包交给内核处理
可以在lwipcomm.c中定义如下函数
/************************************
*操作:读取数据包
*说明:当接收到数据后调用,从网络缓冲区中读取接收到的数据包并将其发送给LWIP处理
************************************/
void lwip_pkt_handle(void)
{
ethernetif_input(&DM9000_netif);
}
五、安装LwIP时钟
在lwipcomm.c中添加时钟函数,即使用定时器中断,每10ms对全局变量lwip_localtime加10。
1.4.1版本中使用sys_check_timeouts()处理内核的各种定时事件,要求实现一个sys_now()返回当前系统时间
/************************************
*操作:获取当前时间,用于内核定时
*说明:
************************************/
unsigned int sys_now(void)
{
return lwip_localtime;
}
void LwIP_Init_task(void)
{
struct ip_addr ipaddr, netmask, gw;
DM9000_Init();
lwip_init();
IP4_ADDR(&ipaddr, 192, 168, 1, 30);
IP4_ADDR(&netmask, 255, 255, 255, 0);
IP4_ADDR(&gw, 192, 168, 1, 1);
netif_add(&DM9000_netif, &ipaddr, &netmask, &gw, NULL, ethernetif_init, ethernet_input);
netif_set_default(&DM9000_netif);
netif_set_up(&DM9000_netif);
}