Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 623|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    6 天前
  • 签到天数: 803 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726482
    发表于 2021-9-6 17:22:19 | 显示全部楼层 |阅读模式

    因为实际应用需要基于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地址的程序段,即可使用~~

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-11-23 18:12 , Processed in 1.036851 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表