解决目前NIOS 8.0无法加载LwIP模块的可行性方法(基于DE2,DM9000网卡芯片)

因为实际应用需要基于LwIP实现网络服务器,但目前NIOS 8.0版本已经不建议用户使用它,直观的现象是用户不能直接调用LwIP的库函数,我结合自己的摸索,总结出建立基于LwIP的软件工程方法:

通讯板实现和上位机间的网络通讯,具体建立工程步骤如下:

1、     打开NIOS IDE,点击file菜单下的switch workplace,将工作空间换至本工程目录下software文件夹下,点击OK;

2、     建立新工程,新建NIOS II C/C++ Application,其中PTF文件选择通讯(TT_COM)工程目录下的TT_COM.ptf,随后,选择历程模板Hello MicroC/OS-II,点确定。目前新建的软件工程默认包含了MicroC/OS-II操作系统,在工程System Library属性里面的RTOS Option里可以进一步配置。硬件工程中已经加载了定时器,频率100HZ,最高可以设定为1KHZ,在软件工程里进行相应调整,RTOS Option里将Enable code for Timer选中后,即可在Timer Management里配置时钟节拍,这里注意与硬件时钟节拍一致!!

3、     加载软件工程源代码文件,将我之前编写的LwIP实现上位机与DM9000的TCP网络通讯程序文件夹:main、inc、driver、task、config这五个文件夹直接拖至新建软件工程下,删除hello_ucosii.c文件。

4、     加载LwIP单元模块,因为新版本的NIOS IDE已经不再支持用户选用LwIP,但是模块还在,只是用普通方式无法加载。这也是之前困扰我的问题。现在具体解决方法如下,打开新建软件工程XXXX_syslib下的system.stf文件,我们会发现这是软件配置文件,里面包含了MicroC/OS-II的设定参数,以<sys_defines>开始,以 </sys_defines>结束,因此从以前找到的包含LwIP旧版本工程里找的system.stf文件里的LwIP设定加载进工程里即可下面是LwIP加载信息,将其复制到system.stf文件中,定义MicroC/OS-II的设定参数结束后</sys_defines>语句下面即可。

<sw_component id="LWIP4UCOS_1" name="Lightweight TCP/IP Stack" sopc_component_dir="altera_lwip">

<sys_defines>

<define name="mem_size" quote="no" value="32768"/>

<define name="memp_num_pbuf" quote="no" value="32"/>

<define name="memp_num_netbuf" quote="no" value="32"/>

<define name="memp_num_udp_pcb" quote="no" value="8"/>

<define name="memp_num_tcp_pcb" quote="no" value="8"/>

<define name="memp_num_tcp_pcb_listen" quote="no" value="2"/>

<define name="memp_num_api_msg" quote="no" value="32"/>

<define name="memp_num_tcpip_msg" quote="no" value="32"/>

<define name="pbuf_pool_size" quote="no" value="16"/>

<define name="pbuf_pool_bufsize" quote="no" value="1536"/>

<define name="arp_table_size" quote="no" value="10"/>

<define name="ip_forward" quote="no" value="0"/>

<define name="icmp_ttl" quote="no" value="255"/>

<define name="lwip_dhcp" quote="no" value="1"/>

<define name="dhcp_does_arp_check" quote="no" value="1"/>

<define name="lwip_udp" quote="no" value="1"/>

<define name="lwip_tcp" quote="no" value="1"/>

<define name="tcp_wnd" quote="no" value="2048"/>

<define name="tcp_maxrtx" quote="no" value="4"/>

<define name="tcp_synmaxrtx" quote="no" value="4"/>

<define name="tcp_mss" quote="no" value="1476"/>

<define name="tcp_snd_buf" quote="no" value="32768"/>

<define name="lwip_stats" quote="no" value="0"/>

<define name="lwip_stack_size" quote="no" value="2048"/>

<define name="lwip_default_if" quote="yes" value="lan91c111"/>

</sys_defines>

</sw_component>

 

其中,关于LwIP的设定可以在这里修改,DHCP如果不需要,可以将<define name="lwip_dhcp" quote="no" value="1"/>改为<define name="lwip_dhcp" quote="no" value="0"/>;

5、     保存工程后,编译,正常的化能够编译通过,并且在System Library属性里面的Software Components选项卡里的LwIP,里面的选项虽然不能选,但是可以看到灰色的选项已经被我们选中。如果想修改LwIP的设置,可以在步骤4修改修改system.stf文件,或修改生成的system.h文件中关于LwIP的设定即可,相应设定如下:

/*

 * Lightweight TCP/IP Stack (Deprecated) configuration

 *

 */

 

#define MEM_SIZE 32768

#define MEMP_NUM_PBUF 32

#define MEMP_NUM_NETBUF 32

#define MEMP_NUM_UDP_PCB 8

#define MEMP_NUM_TCP_PCB 8

#define MEMP_NUM_TCP_PCB_LISTEN 2

#define MEMP_NUM_API_MSG 32

#define MEMP_NUM_TCPIP_MSG 32

#define PBUF_POOL_SIZE 16

#define PBUF_POOL_BUFSIZE 1536

#define ARP_TABLE_SIZE 10

#define IP_FORWARD 0

#define ICMP_TTL 255

#define LWIP_DHCP 0

#define DHCP_DOES_ARP_CHECK 1

#define LWIP_UDP 1

#define LWIP_TCP 1

#define TCP_WND 2048

#define TCP_MAXRTX 4

#define TCP_SYNMAXRTX 4

#define TCP_MSS 1476

#define TCP_SND_BUF 32768

#define LWIP_STATS 0

#define LWIP_STACK_SIZE 2048

#define LWIP_DEFAULT_IF "lan91c111"

 

这样便可以加载LwIP,另外直接将DE2中写好的DM9000驱动拖进来,修改读取MAC地址的程序段,即可使用~~

posted on 2012-04-15 12:03  可见光  阅读(2467)  评论(3编辑  收藏  举报

导航